view tests/test-mq-safety.t @ 39270:37e56607cbb9

lfs: add a progress bar when searching for blobs to upload The search itself can take an extreme amount of time if there are a lot of revisions involved. I've got a local repo that took 6 minutes to push 1850 commits, and 60% of that time was spent here (there are ~70K files): \ 58.1% wrapper.py: extractpointers line 297: pointers = extractpointers(... | 57.7% wrapper.py: pointersfromctx line 352: for p in pointersfromctx(ct... | 57.4% wrapper.py: pointerfromctx line 397: p = pointerfromctx(ctx, f, ... \ 38.7% context.py: __contains__ line 368: if f not in ctx: | 38.7% util.py: __get__ line 82: return key in self._manifest | 38.7% context.py: _manifest line 1416: result = self.func(obj) | 38.7% manifest.py: read line 472: return self._manifestctx.re... \ 25.6% revlog.py: revision line 1562: text = rl.revision(self._node) \ 12.8% revlog.py: _chunks line 2217: bins = self._chunks(chain, ... | 12.0% revlog.py: decompressline 2112: ladd(decomp(buffer(data, ch... \ 7.8% revlog.py: checkhash line 2232: self.checkhash(text, node, ... | 7.8% revlog.py: hash line 2315: if node != self.hash(text, ... | 7.8% revlog.py: hash line 2242: return hash(text, p1, p2) \ 12.0% manifest.py: __init__ line 1565: self._data = manifestdict(t... \ 16.8% context.py: filenode line 378: if not _islfs(fctx.filelog(... | 15.7% util.py: __get__ line 706: return self._filelog | 14.8% context.py: _filelog line 1416: result = self.func(obj) | 14.8% localrepo.py: file line 629: return self._repo.file(self... | 14.8% filelog.py: __init__ line 1134: return filelog.filelog(self... | 14.5% revlog.py: __init__ line 24: censorable=True)
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 24 Aug 2018 17:45:46 -0400
parents 4441705b7111
children
line wrap: on
line source

  $ echo '[extensions]' >> $HGRCPATH
  $ echo 'hgext.mq =' >> $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 qrefresh public revision
  (see 'hg help phases' for details)
  [255]
  $ hg revert -a
  reverting foo
  $ hg qpop
  abort: popping would remove a public revision
  (see 'hg help phases' for details)
  [255]
  $ hg qfold bar
  abort: cannot qrefresh public 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
  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 qrefresh 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
  new changesets 07f494440405
  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 ..