view tests/test-relink.t @ 30234:34a5f6c66bc5 stable

tests: invoke printenv.py via sh -c for test portability On Windows platform, invoking printenv.py directly via hook is problematic, because: - unless binding between *.py suffix and python runtime, application selector dialog is displayed, and running test is blocked at each printenv.py invocations - it isn't safe to assume binding between *.py suffix and python runtime, because application binding is easily broken For example, installing IDE (VisualStudio with Python Tools, or so) often requires binding between source files and IDE itself. This patch invokes printenv.py via sh -c for test portability. This is a kind of follow up for d19787db6fe0, which eliminated explicit "python" for printenv.py. There are already other 'sh -c "printenv.py"' in *.t files, and this fix should be reasonable. This changes were confirmed in cases below: - without any application binding for *.py suffix - with binding between *.py suffix and VisualStudio This patch also replaces "echo + redirection" style with "heredoc" style, because: - hook command line is parsed by cmd.exe as shell at first, and - single quotation can't quote arguments on cmd.exe, therefore, - "printenv.py foobar" should be quoted by double quotation, but - nested quoting (or tricky escaping) isn't readable
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sat, 29 Oct 2016 02:44:45 +0900
parents bd625cd4e5e7
children 75be14993fda
line wrap: on
line source

#require hardlink

  $ echo "[extensions]" >> $HGRCPATH
  $ echo "relink=" >> $HGRCPATH

  $ fix_path() {
  >     tr '\\' /
  > }

  $ cat > arelinked.py <<EOF
  > import sys, os
  > from mercurial import util
  > path1, path2 = sys.argv[1:3]
  > if util.samefile(path1, path2):
  >     print '%s == %s' % (path1, path2)
  > else:
  >     print '%s != %s' % (path1, path2)
  > EOF


create source repository

  $ hg init repo
  $ cd repo
  $ echo a > a
  $ echo b > b
  $ hg ci -Am addfile
  adding a
  adding b
  $ cat "$TESTDIR/binfile.bin" >> a
  $ cat "$TESTDIR/binfile.bin" >> b
  $ hg ci -Am changefiles

make another commit to create files larger than 1 KB to test
formatting of final byte count

  $ cat "$TESTDIR/binfile.bin" >> a
  $ cat "$TESTDIR/binfile.bin" >> b
  $ hg ci -m anotherchange

don't sit forever trying to double-lock the source repo

  $ hg relink .
  relinking $TESTTMP/repo/.hg/store to $TESTTMP/repo/.hg/store (glob)
  there is nothing to relink


Test files are read in binary mode

  $ $PYTHON -c "file('.hg/store/data/dummy.i', 'wb').write('a\r\nb\n')"
  $ cd ..


clone and pull to break links

  $ hg clone --pull -r0 repo clone
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 2 changes to 2 files
  updating to branch default
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd clone
  $ hg pull -q
  $ echo b >> b
  $ hg ci -m changeb
  created new head
  $ $PYTHON -c "file('.hg/store/data/dummy.i', 'wb').write('a\nb\r\n')"


relink

  $ hg relink --debug --config progress.debug=true | fix_path
  relinking $TESTTMP/repo/.hg/store to $TESTTMP/clone/.hg/store
  tip has 2 files, estimated total number of files: 3
  collecting: 00changelog.i 1/3 files (33.33%)
  collecting: 00manifest.i 2/3 files (66.67%)
  collecting: a.i 3/3 files (100.00%)
  collecting: b.i 4/3 files (133.33%)
  collecting: dummy.i 5/3 files (166.67%)
  collected 5 candidate storage files
  not linkable: 00changelog.i
  not linkable: 00manifest.i
  pruning: data/a.i 3/5 files (60.00%)
  not linkable: data/b.i
  pruning: data/dummy.i 5/5 files (100.00%)
  pruned down to 2 probably relinkable files
  relinking: data/a.i 1/2 files (50.00%)
  not linkable: data/dummy.i
  relinked 1 files (1.36 KB reclaimed)
  $ cd ..


check hardlinks

  $ python arelinked.py repo/.hg/store/data/a.i clone/.hg/store/data/a.i
  repo/.hg/store/data/a.i == clone/.hg/store/data/a.i
  $ python arelinked.py repo/.hg/store/data/b.i clone/.hg/store/data/b.i
  repo/.hg/store/data/b.i != clone/.hg/store/data/b.i