view tests/test-merge-closedheads.t @ 50443:3b199593fedd

hidden: add support to explicitly access hidden changesets via HTTP We now detect hidden access request and validate them while handling HTTP wireprotocol command. This changeset only introduces server support. Client support is added in a subsequent changeset. The mechanism we use for the HTTP wireprotocol is the same as the one used to lift filtering for hgweb. The use of the global `access-hidden` parameter in the http url is a simple and effective approach that * works around the lack of global parameters in wire protocol v1, * reuses the mechanism used for hgweb (that does not use the wireproto), and * can be safely ignored by older client (fitting the best effort contract). The feature is still experimental, so we can easily update the implementation details in the future. However, landing a first implementation now will help test the feature in the wild and iterate on alternative implementations if deemed necessary.
author Manuel Jacob <me@manueljacob.de>
date Sat, 13 Apr 2019 02:01:26 +0200
parents 8197b395710e
children
line wrap: on
line source

  $ hgcommit() {
  >    hg commit -u user "$@"
  > }

  $ hg init clhead
  $ cd clhead

  $ touch foo && hg add && hgcommit -m 'foo'
  adding foo
  $ touch bar && hg add && hgcommit -m 'bar'
  adding bar
  $ touch baz && hg add && hgcommit -m 'baz'
  adding baz

  $ echo "flub" > foo
  $ hgcommit -m "flub"
  $ echo "nub" > foo
  $ hgcommit -m "nub"

  $ hg up -C 2
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

  $ echo "c1" > c1
  $ hg add c1
  $ hgcommit -m "c1"
  created new head
  $ echo "c2" > c1
  $ hgcommit -m "c2"

  $ hg up -C 2
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved

  $ echo "d1" > d1
  $ hg add d1
  $ hgcommit -m "d1"
  created new head
  $ echo "d2" > d1
  $ hgcommit -m "d2"
  $ hg tag -l good

fail with three heads
  $ hg up -C good
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge
  abort: branch 'default' has 3 heads - please merge with an explicit rev
  (run 'hg heads .' to see heads, specify rev with -r)
  [255]

close one of the heads
  $ hg up -C 6
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hgcommit -m 'close this head' --close-branch

succeed with two open heads
  $ hg up -C good
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg up -C good
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hgcommit -m 'merged heads'

hg update -C 8
  $ hg update -C 8
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

hg branch some-branch
  $ hg branch some-branch
  marked working directory as branch some-branch
  (branches are permanent and global, did you want a bookmark?)
hg commit
  $ hgcommit -m 'started some-branch'
hg commit --close-branch
  $ hgcommit --close-branch -m 'closed some-branch'

hg update default
  $ hg update default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
hg merge some-branch
  $ hg merge some-branch
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
hg commit (no reopening of some-branch)
  $ hgcommit -m 'merge with closed branch'

  $ cd ..