[PATCH 7 of 8] clone: add --abandoned flag

Martin Geisler mg at lazybytes.net
Wed Jun 1 11:42:53 CDT 2011


# HG changeset patch
# User Martin Geisler <mg at lazybytes.net>
# Date 1306946445 -7200
# Node ID ff0d35c68b063db94e29809ac52281f099b9e365
# Parent  756c1fbbecb6fe8ef798f8063ee95b738d47f8b7
clone: add --abandoned flag

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -967,6 +967,8 @@
     ('u', 'updaterev', '', _('revision, tag or branch to check out'), _('REV')),
     ('r', 'rev', [], _('include the specified changeset'), _('REV')),
     ('b', 'branch', [], _('clone only the specified branch'), _('BRANCH')),
+    ('', 'abandoned', False, _('include abandoned changesets'
+                               '(default for local clones)')),
     ('', 'pull', None, _('use pull protocol to copy metadata')),
     ('', 'uncompressed', None, _('use uncompressed transfer (fast over LAN)')),
     ] + remoteopts,
@@ -1043,7 +1045,8 @@
                  stream=opts.get('uncompressed'),
                  rev=opts.get('rev'),
                  update=opts.get('updaterev') or not opts.get('noupdate'),
-                 branch=opts.get('branch'))
+                 branch=opts.get('branch'),
+                 abandoned=opts.get('abandoned'))
 
     return r is None
 
diff --git a/mercurial/hg.py b/mercurial/hg.py
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -170,7 +170,7 @@
         _update(r, uprev)
 
 def clone(ui, source, dest=None, pull=False, rev=None, update=True,
-          stream=False, branch=None):
+          stream=False, branch=None, abandoned=False):
     """Make a copy of an existing repository.
 
     Create a copy of an existing repository in a new directory.  The
@@ -325,9 +325,10 @@
                 revs = [srcrepo.lookup(r) for r in rev]
                 checkout = revs[0]
             if destrepo.local():
-                destrepo.clone(srcrepo, heads=revs, stream=stream)
+                destrepo.clone(srcrepo, heads=revs, stream=stream,
+                               abandoned=abandoned)
             elif srcrepo.local():
-                srcrepo.push(destrepo, revs=revs)
+                srcrepo.push(destrepo, revs=revs, abandoned=abandoned)
             else:
                 raise util.Abort(_("clone from remote to remote not supported"))
 
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -2010,7 +2010,7 @@
         finally:
             lock.release()
 
-    def clone(self, remote, heads=[], stream=False):
+    def clone(self, remote, heads=[], stream=False, abandoned=False):
         '''clone remote repository.
 
         keyword arguments:
@@ -2036,7 +2036,7 @@
                 # if we support it, stream in and adjust our requirements
                 if not streamreqs - self.supportedformats:
                     return self.stream_in(remote, streamreqs)
-        return self.pull(remote, heads)
+        return self.pull(remote, heads, abandoned=abandoned)
 
     def pushkey(self, namespace, key, old, new):
         self.hook('prepushkey', throw=True, namespace=namespace, key=key,
diff --git a/tests/test-abandoned.t b/tests/test-abandoned.t
--- a/tests/test-abandoned.t
+++ b/tests/test-abandoned.t
@@ -411,11 +411,62 @@
   0 54dbcd775ef0 init
   $ hg rollback -q
 
+hg clone
+========
+
+  $ cd ..
+  $ hg clone repo hardlink-clone
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R hardlink-clone log --abandoned
+  2 339976ff5010 abandoned
+  1 0b00c28422ee x
+  0 54dbcd775ef0 init
+  $ rm -r hardlink-clone
+
+  $ hg clone --pull repo pull-clone
+  requesting all changes
+  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
+  $ hg -R pull-clone log --abandoned
+  0 54dbcd775ef0 init
+  $ rm -r pull-clone
+
+  $ hg clone ssh://user@dummy/repo ssh-clone
+  requesting all changes
+  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
+  $ hg -R ssh-clone log --abandoned
+  0 54dbcd775ef0 init
+  $ rm -r ssh-clone
+
+  $ hg clone --abandoned ssh://user@dummy/repo full-ssh-clone
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 2 changes to 2 files
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R full-ssh-clone log --abandoned
+  2 339976ff5010 abandoned
+  1 0b00c28422ee x
+  0 54dbcd775ef0 init
+  $ rm -r full-ssh-clone
+
 ################################################################
 Create non-abandoned child changeset y on top of the abandoned
 changeset x. This makes changeset 2 irrelevant for x.
 
-  $ cd ../repo
+  $ cd repo
   $ touch y
   $ hg commit -A -m y y
   created new head
@@ -730,3 +781,56 @@
   1 0b00c28422ee x
   0 54dbcd775ef0 init
   $ hg rollback -q
+
+hg clone
+========
+
+  $ cd ..
+  $ hg clone repo hardlink-clone
+  updating to branch default
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R hardlink-clone log --abandoned
+  3 4936e3be10e0 y
+  2 339976ff5010 abandoned
+  1 0b00c28422ee x
+  0 54dbcd775ef0 init
+
+  $ hg clone --pull repo pull-clone
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 3 changes to 3 files
+  updating to branch default
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R pull-clone log --abandoned
+  2 4936e3be10e0 y
+  1 0b00c28422ee x
+  0 54dbcd775ef0 init
+
+  $ hg clone ssh://user@dummy/repo ssh-clone
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 3 changes to 3 files
+  updating to branch default
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R ssh-clone log --abandoned
+  2 4936e3be10e0 y
+  1 0b00c28422ee x
+  0 54dbcd775ef0 init
+
+  $ hg clone --abandoned ssh://user@dummy/repo full-ssh-clone
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 4 changesets with 3 changes to 3 files (+1 heads)
+  updating to branch default
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R full-ssh-clone log --abandoned
+  3 4936e3be10e0 y
+  2 339976ff5010 abandoned
+  1 0b00c28422ee x
+  0 54dbcd775ef0 init
diff --git a/tests/test-debugcomplete.t b/tests/test-debugcomplete.t
--- a/tests/test-debugcomplete.t
+++ b/tests/test-debugcomplete.t
@@ -189,7 +189,7 @@
   $ hg debugcommands
   add: include, exclude, subrepos, dry-run
   annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, include, exclude
-  clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd, insecure
+  clone: noupdate, updaterev, rev, branch, abandoned, pull, uncompressed, ssh, remotecmd, insecure
   commit: addremove, close-branch, include, exclude, message, logfile, date, user
   diff: rev, change, text, git, nodates, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, include, exclude, subrepos
   export: output, switch-parent, rev, text, git, nodates


More information about the Mercurial-devel mailing list