You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Stefan Sperling <st...@elego.de> on 2007/12/04 23:13:49 UTC

Re: merging a link broken?

Thread moved from users@ to dev@

On Tue, Dec 04, 2007 at 04:42:48PM -0500, bfc0713@verizon.net wrote:
> This seems like very basic brokedness, so I hope I'm missing something.
> Using 1.4.3, but will upgrade if it can help.
> 
> In the trunk, have a directory with a file and a link
> 	L -> A
> 
> In one changeset, remove A, add B, and modify softlink to point at B
> 
> 	L -> B
> 
> svn ci ...;
> D A
> A B
> M L
> 
> Now try merging that changeset to a branch and you get an error about
> the link-name not existing.  It's as though it does the deletion
> first in the merge, then tries the modify on the link, but tries
> to access the *real* file and falls over.  The new file isn't added
> during the failed merge.
> 
> The link does have svn:special set to * for the link.

First, could these issues be related somehow?

"merging a symlink-turned-into-regular file fails and wedges working
copy": http://subversion.tigris.org/issues/show_bug.cgi?id=2530

"Sym links can only be replaced in 2 steps":
http://subversion.tigris.org/issues/show_bug.cgi?id=2622


Second, I think this is a bug.
Can I create a new issue for this? Or does anyone know whether
a duplicate for this exists in the issue tracker? I searched the
tracker for "link" and "symlink" but nothing that totally matches
this turned up.

Described behaviour confirmed on current trunk with the following recipe:

  #!/bin/sh
  
  REPOS_URL="file://`pwd`/repos"
  
  set -e
  set -x
  
  rm -rf repos project wc-trunk wc-mybranch
  
  svnadmin create repos
  
  mkdir project
  echo a > project/a
  (cd project && ln -s a link)
  (cd project && svn import $REPOS_URL/trunk -m "import")
  
  svn co $REPOS_URL/trunk wc-trunk
  
  svn mkdir $REPOS_URL/branches -m "create branch dir"
  svn cp $REPOS_URL/trunk $REPOS_URL/branches/mybranch -m "branching trunk"
  
  svn rm wc-trunk/a
  echo b > wc-trunk/b
  svn add wc-trunk/b
  (cd wc-trunk && ln -sf b link)
  (cd wc-trunk && svn commit -m "removed a, added b, changed link")
  
  svn co $REPOS_URL/branches/mybranch wc-mybranch
  (cd wc-mybranch && svn merge $REPOS_URL/branches/mybranch $REPOS_URL/trunk .)

I also ran the merge command in gdb and stopped it at the point
just before the error seems to be thrown. The backtrace is rather huge,
but I'm pasting it below anyway.

Just as Mr. bfc0713 was saying, it looks like during the merge command,
svn_io_file_open tries to open the symlink "link", but because the symlink
target has already been deleted at that point the OS returns ENOENT.

I'm not entirely sure how we should deal with this (i.e. I have no clue :)

I would happily look into fixing this if someone pointed me in the
right direction.


(gdb) bt
#0  svn_io_file_open (new_file=0xbfbfd638, fname=0x82300d0 "link", flag=1,
    perm=4095, pool=0x8260018) at subversion/libsvn_subr/io.c:2626
#1  0x08130801 in contents_identical_p (identical_p=0xbfbfd684,
    file1=0x825f248 ".svn/tmp/tempfile.4.tmp", file2=0x82300d0 "link",
    pool=0x8260018) at subversion/libsvn_subr/io.c:3353
#2  0x081309aa in svn_io_files_contents_same_p (same=0xbfbfd6cc,
    file1=0x825f248 ".svn/tmp/tempfile.4.tmp", file2=0x82300d0 "link",
    pool=0x8260018) at subversion/libsvn_subr/io.c:3407
#3  0x0809fb8e in svn_wc__merge_internal (log_accum=0xbfbfd884,
    merge_outcome=0xbfbfd910, left=0x8230238 "/var/tmp/tmp.2",
    right=0x82508c0 ".svn/tmp/tempfile.2.tmp", merge_target=0x82300d0 "link",
    copyfrom_text=0x0, adm_access=0x8199978,
    left_label=0x82600d0 ".merge-left.r4",
    right_label=0x82600e0 ".merge-right.r4",
    target_label=0x81554e1 ".working", dry_run=0, diff3_cmd=0x0,
    merge_options=0x0, prop_diff=0x82300d8,
    conflict_func=0x8075a6c <conflict_resolver>, conflict_baton=0xbfbfd8f0,
    pool=0x8260018) at subversion/libsvn_wc/merge.c:625
#4  0x080a019f in svn_wc_merge3 (merge_outcome=0xbfbfd910,
    left=0x8230238 "/var/tmp/tmp.2",
    right=0x82508c0 ".svn/tmp/tempfile.2.tmp", merge_target=0x82300d0 "link",
    adm_access=0x8199978, left_label=0x82600d0 ".merge-left.r4",
    right_label=0x82600e0 ".merge-right.r4",
    target_label=0x81554e1 ".working", dry_run=0, diff3_cmd=0x0,
    merge_options=0x0, prop_diff=0x82300d8,
    conflict_func=0x8075a6c <conflict_resolver>, conflict_baton=0xbfbfd8f0,
    pool=0x8260018) at subversion/libsvn_wc/merge.c:851
#5  0x08075e88 in merge_file_changed (adm_access=0x8199978,
    content_state=0xbfbfd9a0, prop_state=0xbfbfd99c, mine=0x82300d0 "link",
    older=0x8230238 "/var/tmp/tmp.2",
    yours=0x82508c0 ".svn/tmp/tempfile.2.tmp", older_rev=4, yours_rev=4,
    mimetype1=0x0, mimetype2=0x0, prop_changes=0x82300d8,
    original_props=0x824a188, baton=0xbfbfde50)
    at subversion/libsvn_client/merge.c:503
#6  0x08082b01 in close_file (file_baton=0x8230090,
    text_checksum=0x825a1e8 "e9292b8c4fca95ac8c70b4ae040d0b79", pool=0x8230018)
    at subversion/libsvn_client/repos_diff.c:789
#7  0x0811fe62 in close_file (file_baton=0x8230088,
    text_checksum=0x825a1e8 "e9292b8c4fca95ac8c70b4ae040d0b79", pool=0x8230018)
    at subversion/libsvn_delta/cancel.c:235
#8  0x0811fe62 in close_file (file_baton=0x8230080,
    text_checksum=0x825a1e8 "e9292b8c4fca95ac8c70b4ae040d0b79", pool=0x8230018)
    at subversion/libsvn_delta/cancel.c:235
#9  0x080c6364 in update_entry (b=0x81f43e0, s_rev=4,
    s_path=0x8230050 "/branches/mybranch/link", s_entry=0x822d738,
    t_path=0x8230070 "/trunk/link", t_entry=0x822de78, dir_baton=0x8219428,
    e_path=0x8230068 "link", info=0x0, wc_depth=svn_depth_infinity,
    requested_depth=svn_depth_infinity, pool=0x8230018)
    at subversion/libsvn_repos/reporter.c:853
#10 0x080c696d in delta_dirs (b=0x81f43e0, s_rev=4,
    s_path=0x81ff2b0 "/branches/mybranch", t_path=0x81f4224 "/trunk",
    dir_baton=0x8219428, e_path=0x815ab4f "", start_empty=0,
    wc_depth=svn_depth_infinity, requested_depth=svn_depth_infinity,
    pool=0x81cd018) at subversion/libsvn_repos/reporter.c:1092
#11 0x080c6c9c in drive (b=0x81f43e0, s_rev=4, info=0x81f9040, pool=0x81cd018)
    at subversion/libsvn_repos/reporter.c:1156
#12 0x080c6ff6 in finish_report (b=0x81f43e0, pool=0x81cd018)
    at subversion/libsvn_repos/reporter.c:1224
#13 0x080c735e in svn_repos_finish_report (baton=0x81f43e0, pool=0x81cd018)
    at subversion/libsvn_repos/reporter.c:1343
#14 0x080bbd6d in reporter_finish_report (reporter_baton=0x81f9018,
    pool=0x81cd018) at subversion/libsvn_ra_local/ra_plugin.c:209
#15 0x080788c3 in drive_merge_report_editor (target_wcpath=0x81999a0 "",
---Type <return> to continue, or q <return> to quit---
    url1=0x8199780 "file:///home/stsp/elego/issues/symlink/repos/branches/mybranch", revision1=4,
    url2=0x81997f0 "file:///home/stsp/elego/issues/symlink/repos/trunk",
    revision2=4, children_with_mergeinfo=0x0, is_rollback=0,
    depth=svn_depth_infinity, notify_b=0xbfbfde20, adm_access=0x8199978,
    callbacks=0x815552c, merge_b=0xbfbfde50, pool=0x81cd018)
    at subversion/libsvn_client/merge.c:2306
#16 0x0807b2db in do_directory_merge (
    url1=0x8199780 "file:///home/stsp/elego/issues/symlink/repos/branches/mybranch", revision1=4,
    url2=0x81997f0 "file:///home/stsp/elego/issues/symlink/repos/trunk",
    revision2=4, parent_entry=0x8199a10, adm_access=0x8199978,
    depth=svn_depth_infinity, notify_b=0xbfbfde20, merge_b=0xbfbfde50,
    pool=0x81cd018) at subversion/libsvn_client/merge.c:3913
#17 0x0807c000 in do_merge (merge_sources=0x81cc178, target=0x8199868 "",
    target_entry=0x8199a10, adm_access=0x8199978, sources_related=0,
    same_repos=1, ignore_ancestry=0, force=0, dry_run=0, record_only=0,
    depth=svn_depth_infinity, merge_options=0x0, ctx=0x81987b8, pool=0x8198018)
    at subversion/libsvn_client/merge.c:4368
#18 0x0807c459 in svn_client_merge3 (
    source1=0x8199780 "file:///home/stsp/elego/issues/symlink/repos/branches/mybranch", revision1=0xbfbfe010,
    source2=0x81997f0 "file:///home/stsp/elego/issues/symlink/repos/trunk",
    revision2=0xbfbfe000, target_wcpath=0x8199868 "", depth=svn_depth_unknown,
    ignore_ancestry=0, force=0, record_only=0, dry_run=0, merge_options=0x0,
    ctx=0x81987b8, pool=0x8198018) at subversion/libsvn_client/merge.c:4479
#19 0x08057117 in svn_cl__merge (os=0x8198150, baton=0xbfbfe108,
    pool=0x8198018) at subversion/svn/merge-cmd.c:244
#20 0x080568ed in main (argc=5, argv=0xbfbfe294) at subversion/svn/main.c:1832

-- 
Stefan Sperling <st...@elego.de>                 Software Developer
elego Software Solutions GmbH                            HRB 77719
Gustav-Meyer-Allee 25, Gebaeude 12        Tel:  +49 30 23 45 86 96 
13355 Berlin                              Fax:  +49 30 23 45 86 95
http://www.elego.de                 Geschaeftsfuehrer: Olaf Wagner

Re: merging a link broken?

Posted by David O'Shea <da...@s3group.com>.
On 05/12/2007 23:47, Stefan Sperling wrote:
> On Wed, Dec 05, 2007 at 09:49:41AM +0000, David O'Shea wrote:
>> On 04/12/2007 23:13, Stefan Sperling wrote:
>>> Just as Mr. bfc0713 was saying, it looks like during the merge command,
>>> svn_io_file_open tries to open the symlink "link", but because the symlink
>>> target has already been deleted at that point the OS returns ENOENT.
>> I suspect this patch may be related:
>>  http://svn.haxx.se/dev/archive-2007-11/1159.shtml
> 
> That patch does not make my recipe script happy :(

The attach patch seems to fix this problem. However, it causes multiple
other tests to fail, so it's obviously not quite that simple. It's
definately something around there though.

The function has already detranslated the WC link to the repository
stored format and uses this for the diff3 call earlier on, but it's
using the link again here for the svn_io_files_contents_same_p call. The
patch changes it to use the detranslated file which fixes the merge, but
apparently breaks a number of other merge tests (I have not had a chance
to investigate why).

David.
-- 


The information contained in this e-mail and in any attachments is confidential and is designated solely for the attention of the intended recipient(s). If you are not an intended recipient, you must not use, disclose, copy, distribute or retain this e-mail or any part thereof. If you have received this e-mail in error, please notify the sender by return e-mail and delete all copies of this e-mail from your computer system(s).
Please direct any additional queries to: communications@s3group.com.
Thank You.
Silicon and Software Systems Limited. Registered in Ireland no. 378073.
Registered Office: South County Business Park, Leopardstown, Dublin 18

Re: merging a link broken?

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Dec 12, 2007 at 04:09:43PM -0800, David Glasser wrote:
> On Dec 5, 2007 3:47 PM, Stefan Sperling <st...@elego.de> wrote:
> > On Wed, Dec 05, 2007 at 09:49:41AM +0000, David O'Shea wrote:
> > > On 04/12/2007 23:13, Stefan Sperling wrote:
> > > >
> > > > Just as Mr. bfc0713 was saying, it looks like during the merge command,
> > > > svn_io_file_open tries to open the symlink "link", but because the symlink
> > > > target has already been deleted at that point the OS returns ENOENT.
> 
> Is there an issue for this?
> 
> If not, can somebody open one?  (This makes me your buddy.)

Done: http://subversion.tigris.org/issues/show_bug.cgi?id=3051

-- 
Stefan Sperling <st...@elego.de>                 Software Developer
elego Software Solutions GmbH                            HRB 77719
Gustav-Meyer-Allee 25, Gebaeude 12        Tel:  +49 30 23 45 86 96 
13355 Berlin                              Fax:  +49 30 23 45 86 95
http://www.elego.de                 Geschaeftsfuehrer: Olaf Wagner

Re: merging a link broken?

Posted by David Glasser <gl...@davidglasser.net>.
On Dec 5, 2007 3:47 PM, Stefan Sperling <st...@elego.de> wrote:
> On Wed, Dec 05, 2007 at 09:49:41AM +0000, David O'Shea wrote:
> > On 04/12/2007 23:13, Stefan Sperling wrote:
> > >
> > > Just as Mr. bfc0713 was saying, it looks like during the merge command,
> > > svn_io_file_open tries to open the symlink "link", but because the symlink
> > > target has already been deleted at that point the OS returns ENOENT.
> >
> > I suspect this patch may be related:
> >  http://svn.haxx.se/dev/archive-2007-11/1159.shtml
>
> That patch does not make my recipe script happy :(
>
> > There are a number of bits of strangeness regarding symlinks.
>
> Looks like it.

Is there an issue for this?

If not, can somebody open one?  (This makes me your buddy.)

--dave

-- 
David Glasser | glasser@davidglasser.net | http://www.davidglasser.net/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: merging a link broken?

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Dec 05, 2007 at 09:49:41AM +0000, David O'Shea wrote:
> On 04/12/2007 23:13, Stefan Sperling wrote:
> > 
> > Just as Mr. bfc0713 was saying, it looks like during the merge command,
> > svn_io_file_open tries to open the symlink "link", but because the symlink
> > target has already been deleted at that point the OS returns ENOENT.
> 
> I suspect this patch may be related:
>  http://svn.haxx.se/dev/archive-2007-11/1159.shtml

That patch does not make my recipe script happy :(

> There are a number of bits of strangeness regarding symlinks.

Looks like it.

-- 
Stefan Sperling <st...@elego.de>                 Software Developer
elego Software Solutions GmbH                            HRB 77719
Gustav-Meyer-Allee 25, Gebaeude 12        Tel:  +49 30 23 45 86 96 
13355 Berlin                              Fax:  +49 30 23 45 86 95
http://www.elego.de                 Geschaeftsfuehrer: Olaf Wagner

Re: merging a link broken?

Posted by David O'Shea <da...@s3group.com>.
On 04/12/2007 23:13, Stefan Sperling wrote:
> 
> Just as Mr. bfc0713 was saying, it looks like during the merge command,
> svn_io_file_open tries to open the symlink "link", but because the symlink
> target has already been deleted at that point the OS returns ENOENT.

I suspect this patch may be related:
 http://svn.haxx.se/dev/archive-2007-11/1159.shtml

There are a number of bits of strangeness regarding symlinks.

Regards,

David.
-- 

The information contained in this e-mail and in any attachments is confidential and is designated solely for the attention of the intended recipient(s). If you are not an intended recipient, you must not use, disclose, copy, distribute or retain this e-mail or any part thereof. If you have received this e-mail in error, please notify the sender by return e-mail and delete all copies of this e-mail from your computer system(s).
Please direct any additional queries to: communications@s3group.com.
Thank You.
Silicon and Software Systems Limited. Registered in Ireland no. 378073.
Registered Office: Whelan House, South County Business Park, Leopardstown, Dublin 18

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org