view tests/test-mq-safety.t @ 17658:a02c1ffddae9 stable

largefiles: handle commit -A properly, after a --large commit (issue3542) Previous to this, 'commit -A' would add as normal files, files that were already committed as largefiles, resulting in files being listed twice by 'status -A'. It also missed when (only) a largefile was deleted, even though status reported it as '!'. This also has the side effect of properly reporting the state of the affected largefiles in the post commit hook after a remove that also affected a normal file (the largefiles used to be 'R', now are properly absent). Since scmutil.addremove() is called both by the ui command (after some trivial argument validation) and during the commit process when -A is specified, it seems like a more appropriate method to wrap than the addremove command. Currently, a repo is only enabled to use largefiles after an add that explicitly identifies some file as large, and a subsequent commit. Therefore, this patch only changes behavior after such a largefile enabling commit. Note that in the test, if the final commit had a '-v', 'removing large8' would be printed twice. Both of these originate in removelargefiles(). The first print is in verbose mode after traversing remove + forget, the second is because the '_isaddremove' attr is set and 'after' is not.
author Matt Harbison <matt_harbison@yahoo.com>
date Mon, 30 Jul 2012 20:56:41 -0400
parents c6e38fdff23c
children aa9385f983fa
line wrap: on
line source

  $ echo '[extensions]' >> $HGRCPATH
  $ echo 'hgext.mq =' >> $HGRCPATH
  $ echo 'hgext.graphlog =' >> $HGRCPATH

  $ hg init repo
  $ cd repo

  $ echo foo > foo
  $ hg ci -qAm 'add a file'

  $ hg qinit

  $ hg qnew foo
  $ echo foo >> foo
  $ hg qrefresh -m 'append foo'

  $ hg qnew bar
  $ echo bar >> foo
  $ hg qrefresh -m 'append bar'

Try to operate on public mq changeset

  $ hg qpop
  popping bar
  now at: foo
  $ hg phase --public qbase
  $ echo babar >> foo
  $ hg qref
  abort: cannot refresh immutable revision
  (see "hg help phases" for details)
  [255]
  $ hg revert -a
  reverting foo
  $ hg qpop
  abort: popping would remove an immutable revision
  (see "hg help phases" for details)
  [255]
  $ hg qfold bar
  abort: cannot refresh immutable revision
  (see "hg help phases" for details)
  [255]
  $ hg revert -a
  reverting foo

restore state for remaining test

  $ hg qpush
  applying bar
  now at: bar

try to commit on top of a patch

  $ echo quux >> foo
  $ hg ci -m 'append quux'
  abort: cannot commit over an applied mq patch
  [255]


cheat a bit...

  $ mv .hg/patches .hg/patches2
  $ hg ci -m 'append quux'
  $ mv .hg/patches2 .hg/patches


qpop/qrefresh on the wrong revision

  $ hg qpop
  abort: popping would remove a revision not managed by this patch queue
  [255]
  $ hg qpop -n patches
  using patch queue: $TESTTMP/repo/.hg/patches (glob)
  abort: popping would remove a revision not managed by this patch queue
  [255]
  $ hg qrefresh
  abort: working directory revision is not qtip
  [255]

  $ hg up -C qtip
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg qpop
  abort: popping would remove a revision not managed by this patch queue
  [255]
  $ hg qrefresh
  abort: cannot refresh a revision with children
  [255]
  $ hg tip --template '{rev} {desc}\n'
  3 append quux


qpush warning branchheads

  $ cd ..
  $ hg init branchy
  $ cd branchy
  $ echo q > q
  $ hg add q
  $ hg qnew -f qp
  $ hg qpop
  popping qp
  patch queue now empty
  $ echo a > a
  $ hg ci -Ama
  adding a
  $ hg up null
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg branch b
  marked working directory as branch b
  (branches are permanent and global, did you want a bookmark?)
  $ echo c > c
  $ hg ci -Amc
  adding c
  $ hg merge default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -mmerge
  $ hg up default
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg log
  changeset:   2:65309210bf4e
  branch:      b
  tag:         tip
  parent:      1:707adb4c8ae1
  parent:      0:cb9a9f314b8b
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     merge
  
  changeset:   1:707adb4c8ae1
  branch:      b
  parent:      -1:000000000000
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     c
  
  changeset:   0:cb9a9f314b8b
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     a
  
  $ hg qpush
  applying qp
  now at: qp

Testing applied patches, push and --force

  $ cd ..
  $ hg init forcepush
  $ cd forcepush
  $ echo a > a
  $ hg ci -Am adda
  adding a
  $ echo a >> a
  $ hg ci -m changea
  $ hg up 0
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg branch branch
  marked working directory as branch branch
  (branches are permanent and global, did you want a bookmark?)
  $ echo b > b
  $ hg ci -Am addb
  adding b
  $ hg up 0
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg --cwd .. clone -r 0 forcepush forcepush2
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo a >> a
  $ hg qnew patch

Pushing applied patch with --rev without --force

  $ hg push -r . ../forcepush2
  pushing to ../forcepush2
  abort: source has mq patches applied
  [255]

Pushing applied patch with branchhash, without --force

  $ hg push ../forcepush2#default
  pushing to ../forcepush2
  abort: source has mq patches applied
  [255]

Pushing revs excluding applied patch

  $ hg push --new-branch -r 'branch(branch)' -r 2 ../forcepush2
  pushing to ../forcepush2
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files

Pushing applied patch with --force

  $ hg phase --force --secret 'mq()'
  $ hg push --force -r default ../forcepush2
  pushing to ../forcepush2
  searching for changes
  no changes found (ignored 1 secret changesets)
  [1]
  $ hg phase --draft 'mq()'
  $ hg push --force -r default ../forcepush2
  pushing to ../forcepush2
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)

  $ cd ..