tests/test-narrow-rebase.t
author Gregory Szorc <gregory.szorc@gmail.com>
Wed, 19 Sep 2018 17:05:59 -0700
changeset 39853 4ece3cdfd907
parent 36117 a2a6e724d61a
child 40337 cb516a854bc7
permissions -rw-r--r--
localrepo: support shared repo creation Previously, hg.share() had its own logic for creating a new repository on the filesystem. With the recent introduction of the createopts dict for passing options to influence repository creation, it is now possible to consolidate the repo creation code for both the normal and shared use cases. This commit teaches the repo creation code in localrepo to recognize when we're creating a shared repo and to act appropriately. Meaningful behavior should be identical. However, there are a few subtle changes: * The .hg/requires file is written out in sorted order (rather than having share-related requirements appended at end). * The .hg directory is created with notindexed=True when a shared repo is being created. Differential Revision: https://phab.mercurial-scm.org/D4707


  $ . "$TESTDIR/narrow-library.sh"

create full repo

  $ hg init master
  $ cd master

  $ mkdir inside
  $ echo inside1 > inside/f1
  $ echo inside2 > inside/f2
  $ mkdir outside
  $ echo outside1 > outside/f1
  $ echo outside2 > outside/f2
  $ hg ci -Aqm 'initial'

  $ echo modified > inside/f1
  $ hg ci -qm 'modify inside/f1'

  $ hg update -q 0
  $ echo modified2 > inside/f2
  $ hg ci -qm 'modify inside/f2'

  $ hg update -q 0
  $ echo modified > outside/f1
  $ hg ci -qm 'modify outside/f1'

  $ hg update -q 0
  $ echo modified2 > outside/f1
  $ hg ci -qm 'conflicting outside/f1'

  $ cd ..

  $ hg clone --narrow ssh://user@dummy/master narrow --include inside
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 5 changesets with 4 changes to 2 files (+3 heads)
  new changesets *:* (glob)
  updating to branch default
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd narrow
  $ cat >> $HGRCPATH <<EOF
  > [extensions]
  > rebase=
  > EOF

  $ hg update -q 0

Can rebase onto commit where no files outside narrow spec are involved

  $ hg update -q 0
  $ echo modified > inside/f2
  $ hg ci -qm 'modify inside/f2'
  $ hg rebase -d 'desc("modify inside/f1")'
  rebasing 5:c2f36d04e05d "modify inside/f2" (tip)
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-rebase.hg (glob)

Can rebase onto conflicting changes inside narrow spec

  $ hg update -q 0
  $ echo conflicting > inside/f1
  $ hg ci -qm 'conflicting inside/f1'
  $ hg rebase -d 'desc("modify inside/f1")' 2>&1 | egrep -v '(warning:|incomplete!)'
  rebasing 6:cdce97fbf653 "conflicting inside/f1" (tip)
  merging inside/f1
  unresolved conflicts (see hg resolve, then hg rebase --continue)
  $ echo modified3 > inside/f1
  $ hg resolve -m 2>&1 | grep -v continue:
  (no more unresolved files)
  $ hg rebase --continue
  rebasing 6:cdce97fbf653 "conflicting inside/f1" (tip)
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-rebase.hg (glob)

Can rebase onto non-conflicting changes outside narrow spec

  $ hg update -q 0
  $ echo modified > inside/f2
  $ hg ci -qm 'modify inside/f2'
  $ hg rebase -d 'desc("modify outside/f1")'
  rebasing 7:c2f36d04e05d "modify inside/f2" (tip)
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-rebase.hg (glob)

Rebase interrupts on conflicting changes outside narrow spec

  $ hg update -q 'desc("conflicting outside/f1")'
  $ hg phase -f -d .
  no phases changed
  $ hg rebase -d 'desc("modify outside/f1")'
  rebasing 4:707c035aadb6 "conflicting outside/f1"
  abort: conflict in file 'outside/f1' is outside narrow clone
  [255]