view tests/test-convert-cvs-branch.t @ 23047:f10019d2ee0a

hook: schedule run "b2x-transactionclose" for after lock release Hooks that run after the transaction need to be able to touch the repository. So we need to run them after the lock release. This is similar to what the "changegroup" hook is doing in the `addchangegroup` function.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Fri, 17 Oct 2014 02:17:36 -0700
parents 7a9cbb315d84
children e955549cd045
line wrap: on
line source

#require cvs

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

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

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 ..