[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Taking stock: BASE keyword on the command line

From: Bert Huijben <bert_at_vmoo.com>
Date: Sat, 30 Jan 2010 10:18:55 +0100

On Sat, Jan 30, 2010 at 4:14 AM, Neels J Hofmeyr <neels_at_elego.de> wrote:
> Neels J Hofmeyr wrote:
>> Starting from 'svn help', I see these commands where @BASE is applicable:
>>
>>    blame (praise, annotate, ann)
>>    cat
>>    copy (cp)
>>    diff (di)
>>    export
>>    info
>>    list (ls)
>>    log
>>    merge
>>    mergeinfo
>>    move (mv, rename, ren)
>>    propdel (pdel, pd)
>>    propedit (pedit, pe)
>>    propget (pget, pg)
>>    proplist (plist, pl)
>>    propset (pset, ps)
>>    switch (sw)
>>    update (up)
>
>
> DISCLAIMER: I have not tested with mixed-revision working copies.
>
> And the results are... Some are consistent, and some are just *wild* AFAICT.
>
>
>
> These commands interpret @BASE to mean...
> --------------------------+----------------------------
> the pristine of the       | "what I checked out":
> copied-here node:         |
> --------------------------+----------------------------
> cat                       | update (but see below)
> copy                      | (prop*)
> diff                      | (merge)
> export                    |
>                          |
>
>
> These make no difference if BASE is supplied
> or not and always use 'what I checked out'
> --------------------------------------------
> prop*
> merge
>
>
> These don't accept BASE, though 'svn help' lists it.
> ----------------------------------------------------
> switch
> prop* --revprop
> move
>
>
> These are inconsistent in their use of BASE,
> either acting different between -rBASE and
> @BASE and/or being plain wrong. (more below)
> --------------------------------------------
> info
> list
> log
> blame
>
> But what shows in these "inconsistent" ones is a slight tendency to mean
> 'copy-from' when saying -rBASE and 'what I checked out' when saying @BASE,
> within the use of the same command, where @BASE is stronger than -rBASE.
> Though, in many cases this only holds true because -rBASE simply has no
> effect at all, and not providing any revision or keyword selects 'copy-from'
> by default. Read all the details below.
>
>
>
>
> Details:
>
>
> * move
> 'svn help' talks about a --revision option and a BASE keyword, but dude,
> that just makes no sense.
>
>
> * switch
> 'svn help' talks about a --revision option and a BASE keyword, but it
> refuses to accept "BASE".
>
>
> * update
> update just uses the revision number "I checked out" and it is a no-op in an
> up-to-date state. Otherwise it is a special case of a 'time-warp' update,
> i.e. when specifying a folder, all its children are pulled back or forward
> so that they match the folder's current "checked out" revision number.
>
>
> * blame
> 'svn blame file'
> tries to show a 'blame' for the locally modified state.
> So I guess count it as based on the copied-here state.

This behavior is new in 1.7. Before 1.7 we didn't look at the locally
modified version.

> 'svn blame -rBASE file'
> shows the copied-from URL's blame, but at the "checked out" revision, which
> may be newer than the copied-from revision. This is not at all related to
> either of the copied-here or "checked out" nodes' histories.
>
> 'svn blame file_at_BASE' and
> 'svn blame -rBASE file_at_BASE'
> both show the blame of the file "I checked out".
>
>
>
> * prop*
> For normal props, using "BASE" makes no difference.
> The BASE keyword is not available for the prop* --revprop commands.
> [[[
> svn: Must specify the revision as a number, a date or 'HEAD' when operating
> on a revision property
> ]]]
>
>
>
> * list
> 'svn list folder' and
> 'svn list -rBASE folder'
> both show the listing of the copied-from URL and Revision (omitting any
> local additions and deletions).
>
> 'svn list folder_at_BASE' and
> 'svn list -rBASE folder_at_BASE'
> both show the listing of the URL "I checked out",
> but at the copied-from revision (makes no sense).
>
>
>
> * log
> 'svn log -v file' and
> 'svn log -v -rBASE file'
> both show the log of the copied-here node, but they start at the "checked
> out" revision (going backwards), showing some history that is not related to
> the node, because it happened on the copy-from node *after* the copy-from
> revision.

This used to give some kind of error in 1.6, but the behavior was
changed in the last few weeks.

> 'svn log -v file_at_BASE'
> 'svn log -v -rBASE file_at_BASE'
> both show the log of the node "I checked out".
>
> In log, passing -rBASE causes the log to only show the node's log for the
> "checked out" revision number. So 'log -rBASE file_at_BASE' is empty when the
> "checked out" node had no changes in the "checked out" revision number.
>
>
>
> * info
> 'svn info file'
> shows the complete information:
> The usual info is "what I checked out", and the copied-here node is
> correctly indicated in Copied From URL and Rev.
> Interestingly, Last Changed Rev reflects copied-here, not "what I checked
> out". This could be argued about (not related to @BASE keyword).
> [[[
> + svn info file
> Path: file
> Name: file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Schedule: replace
> Copied From URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/other_file
> Copied From Rev: 2
> Last Changed Author: neels
> Last Changed Rev: 2
> Last Changed Date: 2010-01-30 03:47:17 +0100 (Sat, 30 Jan 2010)
> Text Last Updated: 2010-01-30 03:47:23 +0100 (Sat, 30 Jan 2010)
> Checksum: 74caf578c8e8a5a1a206e5ee3a0deacc
> ]]]

This could be an artifact of using entries. For added nodes the
revision doesn't make sense, but the revision is available in
svn_wc_entry_t anyway.
(You won't see a valid revision if you use svn_wc__db_read_info())

I think we can do better here with WC-NG, where we store more details.
In WC-NG we have the common properties (author, last modified, last
changed) available in BASE and WORKING and not just one set which we
try to use for both with limited success..

> 'svn info file_at_BASE' and
> 'svn info -rBASE file_at_BASE'
> both show only "what I checked out".
> [[[
> + svn info file_at_BASE
> Path: file
> Name: file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Last Changed Author: neels
> Last Changed Rev: 3
> Last Changed Date: 2010-01-30 03:47:19 +0100 (Sat, 30 Jan 2010)
> ]]]
> (I was consistently at revision 4 before doing the replace, and I copied
> from revision 2. So this case clearly interprets BASE as 4, meaning "what I
> checked out". The URL is also "what I checked out".)
>
> However,
> 'svn info -rBASE file'
> shows a bad mixture:
> [[[
> + svn info -rBASE file
> Path: other_file
> Name: other_file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/other_file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Last Changed Author: neels
> Last Changed Rev: 4
> Last Changed Date: 2010-01-30 03:47:21 +0100 (Sat, 30 Jan 2010)
> ]]]
> - Path and Name show the copied-from basename (!?),
> - URL shows the copied-from path, but
> - Revision, Date and Last Changed show the revision number "I checked out",
>  referring to the copied-from history (in the future after the copy-from
>  rev).
>
>
> Test attached. Note that some lines are good to uncomment/comment to see
> through some cases (e.g. for log and info; should be marked). Most things
> are plain, though.
>
>
> ...phew, what donkey work. XP

Thanks for doing this :)

>
> Now To The Drawing Boards, you guys!
> *ALL OUR "BASE" ARE BELONG TO US!!*

I would like to compare the result to a 1.6.X version, but I don't
have the time to do that today :(
(I hope your script can help here)

    Bert
>
> ~Neels
>
> #!/bin/bash
>
> ## TO MAKE THIS RUN YOUR CUSTOM COMPILED SVN, two simple options:
> ## 1. Adjust your PATH to point at your custom installed location:
> ##      export PATH="$HOME/prefix/svn_trunk/bin:$PATH"
> ## OR
> ## 2. Uncomment the four lines below to use aliases into your
> ##    built source tree. The next line is the only line you should
> ##    need to adjust.
> # SVNDIR=/path/to/built_subversion_source_tree
> # function svn() { ${SVNDIR}/subversion/svn/svn "$@"; }
> # function svnserve() { ${SVNDIR}/subversion/svnserve/svnserve "$@"; }
> # function svnadmin() { ${SVNDIR}/subversion/svnadmin/svnadmin "$@"; }
>
> set -e
>
> svn --version
> REPOS="`pwd`/repos"
> URL="file://$REPOS"
> rm -rf repos wc
> svnadmin create repos
> cat > repos/hooks/pre-revprop-change <<EOF
> #!/bin/sh
> exit 0;
> EOF
> chmod a+x repos/hooks/pre-revprop-change
>
> svn co -q ${URL} wc
>
> set -x
> cd wc
>
> ## ACTUAL TEST
>
> # make a file that is locally replaced...
> echo "r1 for file, i.e. the deleted file's history." > file
> cp file old_state_of_file
> svn add file old_state_of_file
>
> mkdir folder
> echo "r1" > folder/this_is_revision_1_of_folder
> svn add folder
>
> echo file_with_props > file_with_props
> svn add file_with_props
> svn ps prop_r1_on_deleted_file value_r1 file_with_props
> svn ps this_is_rev deleted_r1 file_with_props
>
> svn ci -mr1
> svn up
>
>
>
> echo "r2" > folder/no,_this_is_revision_2_of_folder
> svn add folder/no,_this_is_revision_2_of_folder
>
> svn ps prop_r2_on_deleted_file deleted_r2 file_with_props
> svn ps this_is_rev deleted_r2 file_with_props
>
> echo "r2 for other_file, i.e. the *copied-here* file's history!" > other_file
> svn add other_file
>
> mkdir other_folder
> echo other_folder/file.r2. > other_folder/file.r2
> svn add other_folder
>
> echo other_file_with_props > other_file_with_props
> svn add other_file_with_props
> svn ps prop_r2_on_copied_here_file copied_r2 other_file_with_props
> svn ps this_is_rev copied_r2 other_file_with_props
>
> svn ci -mr2
> svn up
>
> #svn rm folder
>
> echo "r3" > folder/no,_this_is_revision_3_of_folder
> svn add folder/no,_this_is_revision_3_of_folder
>
> echo "r3 for file, i.e. the deleted file's history." > file
> svn ps prop_r3_on_deleted_file deleted_r3 file_with_props
> svn ps this_is_rev deleted_r3 file_with_props
>
>
> svn ps prop_r3_on_deleted_file deleted_r3 file_with_props
> svn ps this_is_rev copied_r3 other_file_with_props
>
> echo other_folder/file.r3. > other_folder/file.r3
> svn add other_folder/file.r3
>
> svn ci -mr3
> svn up
>
> # to test log, remove these changes:
> #echo "r4 for file, i.e. the deleted file's history." > file
> #svn ps prop_r4_on_deleted_file deleted_r4 file_with_props
> #svn ps this_is_rev deleted_r4 file_with_props
>
> svn rm folder
>
> echo "r4 for other_file, i.e. the copied-here file's *later* history!" > other_file
>
> svn rm other_folder/file.r2
> echo other_folder/file.r4. > other_folder/file.r4
> svn add other_folder/file.r4
>
> svn ps prop_r4_on_copied_here_file copied_r4 other_file_with_props
> svn ps this_is_rev copied_r4 other_file_with_props
>
> svn ci -mr4
> svn up
>
> svn rm file
> svn cp ^/other_file_at_2 file
> echo "now WORKING for file" >> file
>
> svn cp ^/other_folder_at_2 folder
> echo "now WORKING for folder/file.r2" >> folder/file.r2
> echo new > folder/now_WORKING_for_folder
> svn add folder/now_WORKING_for_folder
>
> svn rm file_with_props
> svn cp ^/other_file_with_props_at_2 file_with_props
>
> tmp=/tmp/testing_BASE
> mkdir -p "$tmp"
>
> svn st
>
> set +e
>
> svn cat file_at_BASE
>
> svn copy file_at_BASE copy_of_file
> cat copy_of_file
> svn st -v copy_of_file
> svn info copy_of_file
>
> svn copy -rBASE file copy2_of_file
> cat copy2_of_file
> svn st -v copy2_of_file
> svn info copy2_of_file
>
> svn diff --old=file_at_BASE --new=file
> svn diff -rBASE file
>
> svn export file_at_BASE "$tmp/exported"
> cat "$tmp/exported"
>
> svn info file_at_BASE
> svn info -rBASE file
> svn info -rBASE file_at_BASE
> svn info file
>
> echo "folder exists in -r1:2 and does not exist in -r3:4."
> svn list folder
> svn list -rBASE folder
> svn list folder_at_BASE
> svn list -rBASE folder_at_BASE
> svn mkdir folder/another_one
> touch folder/unversioned
> svn list folder
> svn rm --force folder/file.r2
> svn list folder
> svn list -rBASE folder
> svn list -rBASE folder_at_BASE
> svn list folder_at_BASE
>
> svn log -v file
> svn log -v file_at_BASE
> svn log -v -rBASE file_at_BASE
> svn log -v -rBASE file
>
> cat old_state_of_file
> svn merge --accept=postpone -r1:HEAD file old_state_of_file
> svn st old_state_of_file
> cat old_state_of_file
> svn revert old_state_of_file
> cat old_state_of_file
> svn merge --accept=postpone -r1:HEAD file_at_BASE old_state_of_file
> svn st old_state_of_file
> cat old_state_of_file
> svn revert old_state_of_file
> cat old_state_of_file
> svn merge --accept=postpone -r1:BASE file_at_BASE old_state_of_file
> svn st old_state_of_file
> cat old_state_of_file
> svn revert old_state_of_file
> cat old_state_of_file
> svn merge --accept=postpone -r1:BASE file old_state_of_file
> svn st old_state_of_file
> cat old_state_of_file
> # don't svn revert old_state_of_file for mergeinfo:
>
> svn mergeinfo file_at_BASE old_state_of_file
>
> svn proplist file_with_props
> svn proplist file_with_props_at_BASE
> #svn propedit
>
> svn propget this_is_rev file_with_props
> svn propget this_is_rev file_with_props_at_BASE
>
> svn propset --revprop -r1 testrevprop value_in_r1
> svn propset --revprop -r2 testrevprop value_in_r2
> svn propdel --revprop -rBASE testrevprop
> svn propset --revprop -rBASE newrevprop new_value
> svn proplist --revprop -r1
> svn proplist --revprop -r2
>
> svn blame file
> svn blame -rBASE file
> svn blame -rBASE file_at_BASE
> svn blame file_at_BASE
>
> svn mkdir -m a_new_revision ^/r5
> svn update -rBASE file
> ls -d r5
>
> svn up
> cd r5
> svn switch -rBASE ../folder
> ls
>
>
> svn, version 1.7.0 (dev build)
>   compiled Jan 26 2010, 22:16:34
>
> Copyright (C) 2010 The Apache Software Foundation.
> This software consists of contributions made by many people;
> see the NOTICE file for more information.
> Subversion is open source software, see http://subversion.apache.org/
>
> The following repository access (RA) modules are available:
>
> * ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
>  - handles 'http' scheme
>  - handles 'https' scheme
> * ra_svn : Module for accessing a repository using the svn network protocol.
>  - handles 'svn' scheme
> * ra_local : Module for accessing a repository on local disk.
>  - handles 'file' scheme
>
> + cd wc
> + echo 'r1 for file, i.e. the deleted file'\''s history.'
> + cp file old_state_of_file
> + svn add file old_state_of_file
> A         file
> A         old_state_of_file
> + mkdir folder
> + echo r1
> + svn add folder
> A         folder
> A         folder/this_is_revision_1_of_folder
> + echo file_with_props
> + svn add file_with_props
> A         file_with_props
> + svn ps prop_r1_on_deleted_file value_r1 file_with_props
> property 'prop_r1_on_deleted_file' set on 'file_with_props'
> + svn ps this_is_rev deleted_r1 file_with_props
> property 'this_is_rev' set on 'file_with_props'
> + svn ci -mr1
> Adding         file
> Adding         file_with_props
> Adding         folder
> Adding         folder/this_is_revision_1_of_folder
> Adding         old_state_of_file
> Transmitting file data ....
> Committed revision 1.
> + svn up
> At revision 1.
> + echo r2
> + svn add folder/no,_this_is_revision_2_of_folder
> A         folder/no,_this_is_revision_2_of_folder
> + svn ps prop_r2_on_deleted_file deleted_r2 file_with_props
> property 'prop_r2_on_deleted_file' set on 'file_with_props'
> + svn ps this_is_rev deleted_r2 file_with_props
> property 'this_is_rev' set on 'file_with_props'
> + echo 'r2 for other_file, i.e. the *copied-here* file'\''s history!'
> + svn add other_file
> A         other_file
> + mkdir other_folder
> + echo other_folder/file.r2.
> + svn add other_folder
> A         other_folder
> A         other_folder/file.r2
> + echo other_file_with_props
> + svn add other_file_with_props
> A         other_file_with_props
> + svn ps prop_r2_on_copied_here_file copied_r2 other_file_with_props
> property 'prop_r2_on_copied_here_file' set on 'other_file_with_props'
> + svn ps this_is_rev copied_r2 other_file_with_props
> property 'this_is_rev' set on 'other_file_with_props'
> + svn ci -mr2
> Sending        file_with_props
> Adding         folder/no,_this_is_revision_2_of_folder
> Adding         other_file
> Adding         other_file_with_props
> Adding         other_folder
> Adding         other_folder/file.r2
> Transmitting file data ....
> Committed revision 2.
> + svn up
> At revision 2.
> + echo r3
> + svn add folder/no,_this_is_revision_3_of_folder
> A         folder/no,_this_is_revision_3_of_folder
> + echo 'r3 for file, i.e. the deleted file'\''s history.'
> + svn ps prop_r3_on_deleted_file deleted_r3 file_with_props
> property 'prop_r3_on_deleted_file' set on 'file_with_props'
> + svn ps this_is_rev deleted_r3 file_with_props
> property 'this_is_rev' set on 'file_with_props'
> + svn ps prop_r3_on_deleted_file deleted_r3 file_with_props
> property 'prop_r3_on_deleted_file' set on 'file_with_props'
> + svn ps this_is_rev copied_r3 other_file_with_props
> property 'this_is_rev' set on 'other_file_with_props'
> + echo other_folder/file.r3.
> + svn add other_folder/file.r3
> A         other_folder/file.r3
> + svn ci -mr3
> Sending        file
> Sending        file_with_props
> Adding         folder/no,_this_is_revision_3_of_folder
> Sending        other_file_with_props
> Adding         other_folder/file.r3
> Transmitting file data ...
> Committed revision 3.
> + svn up
> At revision 3.
> + svn rm folder
> D         folder/no,_this_is_revision_2_of_folder
> D         folder/no,_this_is_revision_3_of_folder
> D         folder/this_is_revision_1_of_folder
> D         folder
> + echo 'r4 for other_file, i.e. the copied-here file'\''s *later* history!'
> + svn rm other_folder/file.r2
> D         other_folder/file.r2
> + echo other_folder/file.r4.
> + svn add other_folder/file.r4
> A         other_folder/file.r4
> + svn ps prop_r4_on_copied_here_file copied_r4 other_file_with_props
> property 'prop_r4_on_copied_here_file' set on 'other_file_with_props'
> + svn ps this_is_rev copied_r4 other_file_with_props
> property 'this_is_rev' set on 'other_file_with_props'
> + svn ci -mr4
> Deleting       folder
> Sending        other_file
> Sending        other_file_with_props
> Deleting       other_folder/file.r2
> Adding         other_folder/file.r4
> Transmitting file data ..
> Committed revision 4.
> + svn up
> At revision 4.
> + svn rm file
> D         file
> + svn cp '^/other_file_at_2' file
> A         file
> + echo 'now WORKING for file'
> + svn cp '^/other_folder_at_2' folder
> A    folder/file.r2
> Checked out revision 2.
> A         folder
> + echo 'now WORKING for folder/file.r2'
> + echo new
> + svn add folder/now_WORKING_for_folder
> A         folder/now_WORKING_for_folder
> + svn rm file_with_props
> D         file_with_props
> + svn cp '^/other_file_with_props_at_2' file_with_props
> A         file_with_props
> + tmp=/tmp/testing_BASE
> + mkdir -p /tmp/testing_BASE
> + svn st
> R  +    file
> A  +    folder
> M  +    folder/file.r2
> A       folder/now_WORKING_for_folder
> R  +    file_with_props
> + set +e
> + svn cat file_at_BASE
> r2 for other_file, i.e. the *copied-here* file's history!
> + svn copy file_at_BASE copy_of_file
> A         copy_of_file
> + cat copy_of_file
> r2 for other_file, i.e. the *copied-here* file's history!
> + svn st -v copy_of_file
> A  +             -        2 neels        copy_of_file
> + svn info copy_of_file
> Path: copy_of_file
> Name: copy_of_file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/copy_of_file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Schedule: add
> Copied From URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/other_file
> Copied From Rev: 2
> Last Changed Author: neels
> Last Changed Rev: 2
> Last Changed Date: 2010-01-30 03:47:17 +0100 (Sat, 30 Jan 2010)
> Text Last Updated: 2010-01-30 03:47:26 +0100 (Sat, 30 Jan 2010)
> Checksum: 74caf578c8e8a5a1a206e5ee3a0deacc
>
> + svn copy -rBASE file copy2_of_file
> A         copy2_of_file
> + cat copy2_of_file
> r2 for other_file, i.e. the *copied-here* file's history!
> + svn st -v copy2_of_file
> A  +             -        2 neels        copy2_of_file
> + svn info copy2_of_file
> Path: copy2_of_file
> Name: copy2_of_file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/copy2_of_file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Schedule: add
> Copied From URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/other_file
> Copied From Rev: 2
> Last Changed Author: neels
> Last Changed Rev: 2
> Last Changed Date: 2010-01-30 03:47:17 +0100 (Sat, 30 Jan 2010)
> Text Last Updated: 2010-01-30 03:47:27 +0100 (Sat, 30 Jan 2010)
> Checksum: 74caf578c8e8a5a1a206e5ee3a0deacc
>
> + svn diff --old=file_at_BASE --new=file
> Index: file
> ===================================================================
> --- file        (working copy)
> +++ file        (working copy)
> @@ -1 +1,2 @@
>  r2 for other_file, i.e. the *copied-here* file's history!
> +now WORKING for file
> + svn diff -rBASE file
> Index: file
> ===================================================================
> --- file        (working copy)
> +++ file        (working copy)
> @@ -1 +1,2 @@
>  r2 for other_file, i.e. the *copied-here* file's history!
> +now WORKING for file
> + svn export file_at_BASE /tmp/testing_BASE/exported
> Export complete.
> + cat /tmp/testing_BASE/exported
> r2 for other_file, i.e. the *copied-here* file's history!
> + svn info file_at_BASE
> Path: file
> Name: file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Last Changed Author: neels
> Last Changed Rev: 3
> Last Changed Date: 2010-01-30 03:47:19 +0100 (Sat, 30 Jan 2010)
>
> + svn info -rBASE file
> Path: other_file
> Name: other_file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/other_file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Last Changed Author: neels
> Last Changed Rev: 4
> Last Changed Date: 2010-01-30 03:47:21 +0100 (Sat, 30 Jan 2010)
>
> + svn info -rBASE file_at_BASE
> Path: file
> Name: file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Last Changed Author: neels
> Last Changed Rev: 3
> Last Changed Date: 2010-01-30 03:47:19 +0100 (Sat, 30 Jan 2010)
>
> + svn info file
> Path: file
> Name: file
> URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/file
> Repository Root: file:///home/neels/hg/svn/tests/cat_replaced/repos
> Repository UUID: c57cfc0c-0d49-11df-b658-41678fc56d06
> Revision: 4
> Node Kind: file
> Schedule: replace
> Copied From URL: file:///home/neels/hg/svn/tests/cat_replaced/repos/other_file
> Copied From Rev: 2
> Last Changed Author: neels
> Last Changed Rev: 2
> Last Changed Date: 2010-01-30 03:47:17 +0100 (Sat, 30 Jan 2010)
> Text Last Updated: 2010-01-30 03:47:23 +0100 (Sat, 30 Jan 2010)
> Checksum: 74caf578c8e8a5a1a206e5ee3a0deacc
>
> + echo 'folder exists in -r1:2 and does not exist in -r3:4.'
> folder exists in -r1:2 and does not exist in -r3:4.
> + svn list folder
> file.r2
> + svn list -rBASE folder
> file.r2
> + svn list folder_at_BASE
> no,_this_is_revision_2_of_folder
> this_is_revision_1_of_folder
> + svn list -rBASE folder_at_BASE
> no,_this_is_revision_2_of_folder
> this_is_revision_1_of_folder
> + svn mkdir folder/another_one
> A         folder/another_one
> + touch folder/unversioned
> + svn list folder
> file.r2
> + svn rm --force folder/file.r2
> D         folder/file.r2
> + svn list folder
> file.r2
> + svn list -rBASE folder
> file.r2
> + svn list -rBASE folder_at_BASE
> no,_this_is_revision_2_of_folder
> this_is_revision_1_of_folder
> + svn list folder_at_BASE
> no,_this_is_revision_2_of_folder
> this_is_revision_1_of_folder
> + svn log -v file
> ------------------------------------------------------------------------
> r4 | neels | 2010-01-30 03:47:21 +0100 (Sat, 30 Jan 2010) | 1 line
> Changed paths:
>   D /folder
>   M /other_file
>   M /other_file_with_props
>   D /other_folder/file.r2
>   A /other_folder/file.r4
>
> r4
> ------------------------------------------------------------------------
> r2 | neels | 2010-01-30 03:47:17 +0100 (Sat, 30 Jan 2010) | 1 line
> Changed paths:
>   M /file_with_props
>   A /folder/no,_this_is_revision_2_of_folder
>   A /other_file
>   A /other_file_with_props
>   A /other_folder
>   A /other_folder/file.r2
>
> r2
> ------------------------------------------------------------------------
> + svn log -v file_at_BASE
> ------------------------------------------------------------------------
> r3 | neels | 2010-01-30 03:47:19 +0100 (Sat, 30 Jan 2010) | 1 line
> Changed paths:
>   M /file
>   M /file_with_props
>   A /folder/no,_this_is_revision_3_of_folder
>   M /other_file_with_props
>   A /other_folder/file.r3
>
> r3
> ------------------------------------------------------------------------
> r1 | neels | 2010-01-30 03:47:15 +0100 (Sat, 30 Jan 2010) | 1 line
> Changed paths:
>   A /file
>   A /file_with_props
>   A /folder
>   A /folder/this_is_revision_1_of_folder
>   A /old_state_of_file
>
> r1
> ------------------------------------------------------------------------
> + svn log -v -rBASE file_at_BASE
> ------------------------------------------------------------------------
> + svn log -v -rBASE file
> ------------------------------------------------------------------------
> r4 | neels | 2010-01-30 03:47:21 +0100 (Sat, 30 Jan 2010) | 1 line
> Changed paths:
>   D /folder
>   M /other_file
>   M /other_file_with_props
>   D /other_folder/file.r2
>   A /other_folder/file.r4
>
> r4
> ------------------------------------------------------------------------
> + cat old_state_of_file
> r1 for file, i.e. the deleted file's history.
> + svn merge --accept=postpone -r1:HEAD file old_state_of_file
> --- Merging r2 through r4 into 'old_state_of_file':
> U    old_state_of_file
> --- Recording mergeinfo for merge of r2 through r4 into 'old_state_of_file':
>  U   old_state_of_file
> + svn st old_state_of_file
> MM      old_state_of_file
> + cat old_state_of_file
> r3 for file, i.e. the deleted file's history.
> + svn revert old_state_of_file
> Reverted 'old_state_of_file'
> + cat old_state_of_file
> r1 for file, i.e. the deleted file's history.
> + svn merge --accept=postpone -r1:HEAD file_at_BASE old_state_of_file
> --- Merging r2 through r4 into 'old_state_of_file':
> U    old_state_of_file
> --- Recording mergeinfo for merge of r2 through r4 into 'old_state_of_file':
>  U   old_state_of_file
> + svn st old_state_of_file
> MM      old_state_of_file
> + cat old_state_of_file
> r3 for file, i.e. the deleted file's history.
> + svn revert old_state_of_file
> Reverted 'old_state_of_file'
> + cat old_state_of_file
> r1 for file, i.e. the deleted file's history.
> + svn merge --accept=postpone -r1:BASE file_at_BASE old_state_of_file
> --- Merging r2 through r4 into 'old_state_of_file':
> U    old_state_of_file
> --- Recording mergeinfo for merge of r2 through r4 into 'old_state_of_file':
>  U   old_state_of_file
> + svn st old_state_of_file
> MM      old_state_of_file
> + cat old_state_of_file
> r3 for file, i.e. the deleted file's history.
> + svn revert old_state_of_file
> Reverted 'old_state_of_file'
> + cat old_state_of_file
> r1 for file, i.e. the deleted file's history.
> + svn merge --accept=postpone -r1:BASE file old_state_of_file
> --- Merging r2 through r4 into 'old_state_of_file':
> U    old_state_of_file
> --- Recording mergeinfo for merge of r2 through r4 into 'old_state_of_file':
>  U   old_state_of_file
> + svn st old_state_of_file
> MM      old_state_of_file
> + cat old_state_of_file
> r3 for file, i.e. the deleted file's history.
> + svn mergeinfo file_at_BASE old_state_of_file
> r3
> + svn proplist file_with_props
> Properties on 'file_with_props':
>  prop_r2_on_copied_here_file
>  this_is_rev
> + svn proplist file_with_props_at_BASE
> Properties on 'file_with_props':
>  prop_r2_on_copied_here_file
>  this_is_rev
> + svn propget this_is_rev file_with_props
> copied_r2
> + svn propget this_is_rev file_with_props_at_BASE
> copied_r2
> + svn propset --revprop -r1 testrevprop value_in_r1
> property 'testrevprop' set on repository revision 1
> + svn propset --revprop -r2 testrevprop value_in_r2
> property 'testrevprop' set on repository revision 2
> + svn propdel --revprop -rBASE testrevprop
> subversion/svn/main.c:2244: (apr_err=205000)
> svn: Try 'svn help' for more info
> subversion/svn/propdel-cmd.c:108: (apr_err=205000)
> subversion/svn/props.c:60: (apr_err=205000)
> svn: Must specify the revision as a number, a date or 'HEAD' when operating on a revision property
> + svn propset --revprop -rBASE newrevprop new_value
> subversion/svn/main.c:2244: (apr_err=205000)
> svn: Try 'svn help' for more info
> subversion/svn/propset-cmd.c:121: (apr_err=205000)
> subversion/svn/props.c:60: (apr_err=205000)
> svn: Must specify the revision as a number, a date or 'HEAD' when operating on a revision property
> + svn proplist --revprop -r1
> Unversioned properties on revision 1:
>  svn:log
>  svn:author
>  testrevprop
>  svn:date
> + svn proplist --revprop -r2
> Unversioned properties on revision 2:
>  svn:log
>  svn:author
>  testrevprop
>  svn:date
> + svn blame file
>     -          - r2 for other_file, i.e. the *copied-here* file's history!
>     -          - now WORKING for file
> + svn blame -rBASE file
>     4      neels r4 for other_file, i.e. the copied-here file's *later* history!
> + svn blame -rBASE file_at_BASE
>     3      neels r3 for file, i.e. the deleted file's history.
> + svn blame file_at_BASE
>     3      neels r3 for file, i.e. the deleted file's history.
> + svn mkdir -m a_new_revision '^/r5'
>
> Committed revision 5.
> + svn update -rBASE file
> At revision 4.
> + ls -d r5
> ls: cannot access r5: No such file or directory
> + svn up
> A    r5
> Updated to revision 5.
> + cd r5
> + svn switch -rBASE ../folder
> subversion/svn/switch-cmd.c:141: (apr_err=125002)
> svn: '../folder' does not appear to be a URL
> + ls
>
>
Received on 2010-01-30 10:19:33 CET

This is an archived mail posted to the Subversion Dev mailing list.