view tests/test-mq-symlinks.t @ 25018:93e015a3d1ea

commit: add ui.allowemptycommit config option This adds a config flag that enables a user to make empty commits. This is useful in a number of cases. For instance, automation that creates release branches via bookmarks may want to make empty commits to that release bookmark so that it can't be fast-forwarded and so it can record information about the release bookmark's creation. This is already possible with named branches, so making it possible for bookmarks makes sense. Another case we've wanted it is for mirroring repositories into Mercurial. We have automation that syncs commits into hg by running things from the command line. The ability to produce empty commits is useful for syncing unusual commits from other VCS's. In general, allowing the user to create the DAG as they see fit seems useful, and when I mentioned this in IRC more than one person piped up and said they were already hacking around this limitation by using mq, import, and commit-dummy-change-then-amend-the-content-away style solutions.
author Durham Goode <durham@fb.com>
date Mon, 11 May 2015 16:18:28 -0700
parents a387b0390082
children 4d2b9b304ad0
line wrap: on
line source

#require symlink

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

  $ hg init
  $ hg qinit
  $ hg qnew base.patch
  $ echo aaa > a
  $ echo bbb > b
  $ echo ccc > c
  $ hg add a b c
  $ hg qrefresh
  $ "$TESTDIR/readlink.py" a
  a -> a not a symlink


test replacing a file with a symlink

  $ hg qnew symlink.patch
  $ rm a
  $ ln -s b a
  $ hg qrefresh --git
  $ "$TESTDIR/readlink.py" a
  a -> b

  $ hg qpop
  popping symlink.patch
  now at: base.patch
  $ hg qpush
  applying symlink.patch
  now at: symlink.patch
  $ "$TESTDIR/readlink.py" a
  a -> b


test updating a symlink

  $ rm a
  $ ln -s c a
  $ hg qnew --git -f updatelink
  $ "$TESTDIR/readlink.py" a
  a -> c
  $ hg qpop
  popping updatelink
  now at: symlink.patch
  $ hg qpush --debug
  applying updatelink
  patching file a
  committing files:
  a
  committing manifest
  committing changelog
  now at: updatelink
  $ "$TESTDIR/readlink.py" a
  a -> c
  $ hg st


test replacing a symlink with a file

  $ ln -s c s
  $ hg add s
  $ hg qnew --git -f addlink
  $ rm s
  $ echo sss > s
  $ hg qnew --git -f replacelinkwithfile
  $ hg qpop
  popping replacelinkwithfile
  now at: addlink
  $ hg qpush
  applying replacelinkwithfile
  now at: replacelinkwithfile
  $ cat s
  sss
  $ hg st


test symlink removal

  $ hg qnew removesl.patch
  $ hg rm a
  $ hg qrefresh --git
  $ hg qpop
  popping removesl.patch
  now at: replacelinkwithfile
  $ hg qpush
  applying removesl.patch
  now at: removesl.patch
  $ hg st -c
  C b
  C c
  C s

replace broken symlink with another broken symlink

  $ ln -s linka linka
  $ hg add linka
  $ hg qnew link
  $ hg mv linka linkb
  $ rm linkb
  $ ln -s linkb linkb
  $ hg qnew movelink
  $ hg qpop
  popping movelink
  now at: link
  $ hg qpush
  applying movelink
  now at: movelink
  $ "$TESTDIR/readlink.py" linkb
  linkb -> linkb