view tests/test-addremove.t @ 40391:abbd077965c0

wireprotov2: support exposing linknode of file revisions When supporting shallow file storage, clients may fetch file revisions by changeset. But they may not readily know which changeset introduced a specific file revision. The "linknode" is used to record which changeset introduces which file revision. This commit teaches the "filedata" and "filesdata" wire protocol commands to expose the linknode for file revisions. The implementation is likely wrong when hidden changesets are in play, since the linknode may refer to a hidden changeset. We can deal with this problem later. Differential Revision: https://phab.mercurial-scm.org/D5167
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 19 Oct 2018 15:38:25 +0200
parents 824b687ff6af
children
line wrap: on
line source

  $ hg init rep
  $ cd rep
  $ mkdir dir
  $ touch foo dir/bar
  $ hg -v addremove
  adding dir/bar
  adding foo
  $ hg -v commit -m "add 1"
  committing files:
  dir/bar
  foo
  committing manifest
  committing changelog
  committed changeset 0:6f7f953567a2
  $ cd dir/
  $ touch ../foo_2 bar_2
  $ hg -v addremove
  adding dir/bar_2
  adding foo_2
  $ hg -v commit -m "add 2"
  committing files:
  dir/bar_2
  foo_2
  committing manifest
  committing changelog
  committed changeset 1:e65414bf35c5
  $ cd ..
  $ hg forget foo
  $ hg -v addremove
  adding foo
  $ hg forget foo

  $ hg -v addremove nonexistent
  nonexistent: $ENOENT$
  [1]

  $ cd ..

  $ hg init subdir
  $ cd subdir
  $ mkdir dir
  $ cd dir
  $ touch a.py
  $ hg addremove 'glob:*.py'
  adding a.py
  $ hg forget a.py
  $ hg addremove -I 'glob:*.py'
  adding a.py
  $ hg forget a.py
  $ hg addremove
  adding dir/a.py
  $ cd ..

  $ hg init sim
  $ cd sim
  $ echo a > a
  $ echo a >> a
  $ echo a >> a
  $ echo c > c
  $ hg commit -Ama
  adding a
  adding c
  $ mv a b
  $ rm c
  $ echo d > d
  $ hg addremove -n -s 50 # issue 1696
  removing a
  adding b
  removing c
  adding d
  recording removal of a as rename to b (100% similar)
  $ hg addremove -ns 50 --color debug
  [ui.addremove.removed ui.status|removing a]
  [ui.addremove.added ui.status|adding b]
  [ui.addremove.removed ui.status|removing c]
  [ui.addremove.added ui.status|adding d]
  [ ui.status|recording removal of a as rename to b (100% similar)]
  $ hg addremove -s 50
  removing a
  adding b
  removing c
  adding d
  recording removal of a as rename to b (100% similar)
  $ hg commit -mb
  $ cp b c
  $ hg forget b
  $ hg addremove -s 50
  adding b
  adding c

  $ rm c

  $ hg ci -A -m "c" nonexistent
  nonexistent: $ENOENT$
  abort: failed to mark all new/missing files as added/removed
  [255]

  $ hg st
  ! c
  $ cd ..