tests/test-convert-cvs-branch.t
author Pierre-Yves David <pierre-yves.david@fb.com>
Thu, 13 Nov 2014 11:17:09 +0000
changeset 23312 006e9ef05c31
parent 23172 e955549cd045
child 23675 96529f81e2e9
permissions -rw-r--r--
transaction: support cache file in backupentries We do not want to abort if anything wrong happen while handling a cache file. Cache file have way to be invalidated and if old/bad version stay no misbehavior will happen. Proper value will eventually be computed and the wrong will be righten. This changeset use the transaction reporter (usually writing on stderr) to write details about failed cache handling. This will only apply to write operation using a transaction. The usual update during read only operation will stay a debug message. I was on the way to bring these message back to debug level when I realised it could be a feature. People with write access to the repository are likely to have the power to fix error related to cache (and it is valuable to fix them). So let the things as is for now.

#require cvs

This is http://mercurial.selenic.com/bts/issue1148
and http://mercurial.selenic.com/bts/issue1447

  $ cvscall()
  > {
  >     cvs -f "$@" > /dev/null
  > }
  $ cat <<EOF >> $HGRCPATH
  > [extensions]
  > convert =
  > [convert]
  > cvsps.cache = 0
  > EOF

create cvs repository

  $ mkdir cvsrepo
  $ cd cvsrepo
  $ CVSROOT=`pwd`
  $ export CVSROOT
  $ CVS_OPTIONS=-f
  $ export CVS_OPTIONS
  $ cd ..
  $ cvscall -q -d "$CVSROOT" init

Create a new project

  $ mkdir src
  $ cd src
  $ echo "1" > a
  $ echo "1" > b
  $ cvscall import -m "init" src v0 r0 | sort
  $ cd ..
  $ cvscall co src
  cvs checkout: Updating src
  $ cd src

Branch the project

  $ cvscall tag -b BRANCH
  cvs tag: Tagging .
  $ cvscall up -r BRANCH > /dev/null
  cvs update: Updating .

Modify file a, then b, then a

  $ sleep 1
  $ echo "2" > a
  $ cvscall ci -m "mod a"
  cvs commit: Examining .
  $ echo "2" > b
  $ cvscall ci -m "mod b"
  cvs commit: Examining .
  $ sleep 1
  $ echo "3" > a
  $ cvscall ci -m "mod a again"
  cvs commit: Examining .

Convert

  $ cd ..
  $ hg convert src
  assuming destination src-hg
  initializing destination src-hg repository
  connecting to $TESTTMP/cvsrepo
  scanning source...
  collecting CVS rlog
  7 log entries
  creating changesets
  5 changeset entries
  sorting...
  converting...
  4 Initial revision
  3 init
  2 mod a
  1 mod b
  0 mod a again
  updating tags

Check the result

  $ hg -R src-hg log -G --template '{rev} ({branches}) {desc} files: {files}\n'
  o  5 () update tags files: .hgtags
  |
  | o  4 (BRANCH) mod a again files: a
  | |
  | o  3 (BRANCH) mod b files: b
  | |
  | o  2 (BRANCH) mod a files: a
  | |
  | o  1 (v0) init files:
  |/
  o  0 () Initial revision files: a b
  


issue 1447

  $ cvscall()
  > {
  >     cvs -f "$@" > /dev/null
  >     sleep 1
  > }
  $ cvsci()
  > {
  >     cvs -f ci "$@" >/dev/null
  >     sleep 1
  > }
  $ cvscall -Q -d `pwd`/cvsmaster2 init
  $ cd cvsmaster2
  $ CVSROOT=`pwd`
  $ export CVSROOT
  $ mkdir foo
  $ cd ..
  $ cvscall -Q co -d cvswork2 foo
  $ cd cvswork2
  $ echo foo > a.txt
  $ echo bar > b.txt
  $ cvscall -Q add a.txt b.txt
  $ cvsci -m "Initial commit"
  cvs commit: Examining .
  $ echo foo > b.txt
  $ cvsci -m "Fix b on HEAD"
  cvs commit: Examining .
  $ echo bar > a.txt
  $ cvsci -m "Small fix in a on HEAD"
  cvs commit: Examining .
  $ cvscall -Q tag -b BRANCH
  $ cvscall -Q up -P -rBRANCH
  $ echo baz > b.txt
  $ cvsci -m "Change on BRANCH in b"
  cvs commit: Examining .
  $ hg debugcvsps -x --parents foo
  collecting CVS rlog
  5 log entries
  creating changesets
  4 changeset entries
  ---------------------
  PatchSet 1 
  Date: * (glob)
  Author: * (glob)
  Branch: HEAD
  Tag: (none) 
  Log:
  Initial commit
  
  Members: 
  	a.txt:INITIAL->1.1 
  	b.txt:INITIAL->1.1 
  
  ---------------------
  PatchSet 2 
  Date: * (glob)
  Author: * (glob)
  Branch: HEAD
  Tag: (none) 
  Branchpoints: BRANCH 
  Parent: 1
  Log:
  Fix b on HEAD
  
  Members: 
  	b.txt:1.1->1.2 
  
  ---------------------
  PatchSet 3 
  Date: * (glob)
  Author: * (glob)
  Branch: HEAD
  Tag: (none) 
  Branchpoints: BRANCH 
  Parent: 2
  Log:
  Small fix in a on HEAD
  
  Members: 
  	a.txt:1.1->1.2 
  
  ---------------------
  PatchSet 4 
  Date: * (glob)
  Author: * (glob)
  Branch: BRANCH
  Tag: (none) 
  Parent: 3
  Log:
  Change on BRANCH in b
  
  Members: 
  	b.txt:1.2->1.2.2.1 
  

  $ cd ..