You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Helge Jensen <je...@slog.dk> on 2004/03/21 13:03:06 UTC

replace dir

In svn-0.37.0, the following idiom for replaceing one directory with 
another worked:

   svn rm foo
   rm -rf foo
   svn copy .../.../other foo
   svn commit -m "replaced foo with other"

This does not work with SVN-1.0.1 (and r9111)

The reason seems to be that SVN no longer detects the delete of foo when 
harvesting commits (in commit_util.c:harvest_committables) and also svn 
status shows

   A        foo

not

   R        foo

as expected.

Bug# 1516 (http://subversion.tigris.org/issues/show_bug.cgi?id=1516) 
seems to document this, but i _know_ it worked in 0.37 (using it every 
day at work and home), and I really need the functionality (having 
multiple projects sharing code via svn copy'ing stable versions into the 
projects).

I've got the latest (right now 9111) svn checked out and compiled and 
i'm trying to look at the harvest_commitables, function to find out 
what's going on, and it seemingly only schedules an "add" in the commit.

Any hints, clues or directions on what may have brought on this change, 
or where in particular to focus my interest are welcome.

I'm willing to use time to fix the issue and submit patches but  i would 
like a little bit of aid trying to understand the code, which seems a 
little bit messy, probably because someone like myself, with limited 
knowledge of the code-base sent some pathces :)

-- 
Helge

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

Re: replace dir

Posted by Helge Jensen <je...@slog.dk>.

Philip Martin wrote:

> Helge Jensen <je...@slog.dk> writes:

> I just built 0.37 and it doesn't appear to work

That's very odd, i've been using it for more than a month, so I set out 
to investigate.

I have now seen it doesn't work locally:

 >>>>>>>>>>>>>>>>>>>>>
[hej@infosrv svntest]$ rpm -q subversion
subversion-0.37.0-1
[hej@infosrv svntest]$ svn co file:///home/hej/svntest/repo wc
Checked out revision 0.
[hej@infosrv svntest]$ svn mkdir wc/d1
A         wc/d1
[hej@infosrv svntest]$ svn mkdir wc/d2
A         wc/d2
[hej@infosrv svntest]$ svn commit -m 1 wc
Adding         wc/d1
Adding         wc/d2

Committed revision 1.
[hej@infosrv svntest]$ svn rm wc/d1
D         wc/d1
[hej@infosrv svntest]$ rm -rf wc/d1
[hej@infosrv svntest]$ svn copy file:///home/hej/svntest/repo/d2 wc/d1
Checked out revision 1.
A         wc/d1
Adding         wc/d1
svn: Commit failed (details follow):
svn: Out of date: 'd1' in transaction '3'
<<<<<<<<<<<<<<<<<<<<<

But it works through https, I have been using this for a long time 
now... infact since 0.37.0 came out... and it never occured to me to 
that there could be a difference between the ra-local and ra-dav 
interface before:

 >>>>>>>>>>>>>>>>>>>>>
[hej@infosrv svntest]$ svn -m 'test' mkdir 
https://infosrv.kamstrup.dk/svn/svntest

Committed revision 519.
[hej@infosrv svntest]$ svn -m 'test' mkdir 
https://infosrv.kamstrup.dk/svn/svntest/d1

Committed revision 520.
[hej@infosrv svntest]$ svn -m 'test' mkdir 
https://infosrv.kamstrup.dk/svn/svntest/d2

Committed revision 521.[hej@infosrv svntest]$ svn co 
https://infosrv.kamstrup.dk/svn/svntest httpstest
A  httpstest/d1
A  httpstest/d2
Checked out revision 521.
[hej@infosrv svntest]$ svn rm httpstest/d1
D         httpstest/d1
[hej@infosrv svntest]$ rm -rf httpstest/d1
[hej@infosrv svntest]$ svn copy 
https://infosrv.kamstrup.dk/svn/svntest/d2 httpstest/d1
Checked out revision 521.
A         httpstest/d1
[hej@infosrv svntest]$ svn commit -m 'test' httpstest/
Adding         httpstest/d1

Committed revision 522.
[hej@infosrv svntest]$ rm -rf httpstest/
[hej@infosrv svntest]$ svn co https://infosrv.kamstrup.dk/svn/svntest 
httpstest A  httpstest/d1
A  httpstest/d2
Checked out revision 522.
[hej@infosrv svntest]$ svn log -r522 -v httpstest/
------------------------------------------------------------------------
r522 | HelgeJensen | 2004-03-21 21:04:19 +0100 (Sun, 21 Mar 2004) | 1 line
Changed paths:
    R /svntest/d1 (from /svntest/d2:521)

test
------------------------------------------------------------------------
<<<<<<<<<<<<<<<<<<<<<

 > as far as I am aware it has never worked.

I havent noticed it not working locally, since I never tried, im SURE 
the svn

Here's some info from the various programs:

[hej@infosrv svntest]$ rpm -qa | grep subversion
subversion-perl-0.37.0-1
subversion-0.37.0-1
subversion-devel-0.37.0-1
subversion-tools-0.37.0-1
subversion-server-0.37.0-1
subversion-python-0.37.0-1

[hej@infosrv svntest]$ svn --version
svn, version 0.37.0 (r1)
    compiled Feb  4 2004, 12:37:06

Copyright (C) 2000-2004 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/

The following repository access (RA) modules are available:

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
   - handles 'http' schema
   - handles 'https' schema
* ra_local : Module for accessing a repository on local disk.
   - handles 'file' schema
* ra_svn : Module for accessing a repository using the svn network protocol.
   - handles 'svn' schema

-- 
Helge (confused)


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

Re: replace dir

Posted by Philip Martin <ph...@codematters.co.uk>.
Helge Jensen <je...@slog.dk> writes:

> In svn-0.37.0, the following idiom for replaceing one directory with
> another worked:
>
>    svn rm foo
>    rm -rf foo
>    svn copy .../.../other foo
>    svn commit -m "replaced foo with other"
>
> This does not work with SVN-1.0.1 (and r9111)
>
> The reason seems to be that SVN no longer detects the delete of foo
> when harvesting commits (in commit_util.c:harvest_committables) and
> also svn status shows
>
>    A        foo
>
> not
>
>    R        foo
>
> as expected.
>
> Bug# 1516 (http://subversion.tigris.org/issues/show_bug.cgi?id=1516)
> seems to document this, but i _know_ it worked in 0.37 (using it every
> day at work and home)

I just built 0.37 and it doesn't appear to work, as far as I am aware
it has never worked.

$ svn rm wc/zig
D         wc/zig
$ rm -rf wc/zig
$ svn cp wc/zag wc/zig
A         wc/zig
$ svn ci wc
Adding         wc/zig
svn: Commit failed (details follow):
svn: Out of date: 'zig' in transaction '2'
svn: Your commit message was left in a temporary file:
svn:    '/home/pm/sw/subversion/obj/wc/svn-commit.tmp'
$ svn --version | head 1
svn, version 0.37.0 (dev build)

-- 
Philip Martin

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