view tests/test-merge-closedheads.t @ 37485:0b7475ea38cf

wireproto: port heads command to wire protocol v2 After much thought and consideration, wire protocol version 2's commands will be defined in different functions from the existing commands. This will make it easier to implement these commands because it won't require shoehorning things like response formatting and argument declaration into the same APIs. For example, wire protocol version 1 requires that commands declare a fixed and ordered list of argument names. It isn't really possible to insert new arguments or have optional arguments without breaking backwards compatibility. Wire protocol version 2, however, uses CBOR maps for passing arguments. So arguments a) can be optional b) can be added without BC c) can be strongly typed. This commit starts our trek towards reimplementing the wire protocol for version 2 with the heads command. It is pretty similar to the existing heads command. One added feature is it can be told to operate on only public phase changesets. This is useful for making discovery faster when a repo has tens of thousands of draft phase heads (such as Mozilla's "try" repository). The HTTPv2 server-side protocol has had its `getargs()` implementation updated to reflect that arguments are a map and not a list. Differential Revision: https://phab.mercurial-scm.org/D3179
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 28 Mar 2018 14:55:13 -0700
parents f2719b387380
children 8197b395710e
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)
  [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 ..