[PATCH 1 of 2] phases: allow sharing secrets with friends (support for outgoing)

Dov Feldstern dovdevel at gmail.com
Sun Feb 16 19:05:00 CST 2014


# HG changeset patch
# User Dov Feldstern <dovdevel at gmail.com>
# Date 1392588813 -7200
#      Mon Feb 17 00:13:33 2014 +0200
# Branch stable
# Node ID 2a72585fec2c89d2f6d65c335fbc94dd3b6e3053
# Parent  4e41b2fe46ccfb9722e51e23902f7019d286b15d
phases: allow sharing secrets with friends (support for outgoing)

THIS IS NOT FOR INCLUSION AS-IS! This is just for reference along with the
discussion titled "sharing secret changesets with friends".

diff -r 4e41b2fe46cc -r 2a72585fec2c mercurial/commands.py
--- a/mercurial/commands.py	Thu Feb 13 13:05:09 2014 +0100
+++ b/mercurial/commands.py	Mon Feb 17 00:13:33 2014 +0200
@@ -4330,6 +4330,7 @@
     ('B', 'bookmarks', False, _('compare bookmarks')),
     ('b', 'branch', [], _('a specific branch you would like to push'),
      _('BRANCH')),
+    ('F', 'friend', False, _('share secret changesets with peer')),
     ] + logopts + remoteopts + subrepoopts,
     _('[-M] [-p] [-n] [-f] [-r REV]... [DEST]'))
 def outgoing(ui, repo, dest=None, **opts):
diff -r 4e41b2fe46cc -r 2a72585fec2c mercurial/discovery.py
--- a/mercurial/discovery.py	Thu Feb 13 13:05:09 2014 +0100
+++ b/mercurial/discovery.py	Mon Feb 17 00:13:33 2014 +0200
@@ -88,7 +88,7 @@
         return self._missing
 
 def findcommonoutgoing(repo, other, onlyheads=None, force=False,
-                       commoninc=None, portable=False):
+                       commoninc=None, portable=False, friend=False):
     '''Return an outgoing instance to identify the nodes present in repo but
     not in other.
 
@@ -115,8 +115,12 @@
         og.missingheads = onlyheads or repo.heads()
     elif onlyheads is None:
         # use visible heads as it should be cached
-        og.missingheads = repo.filtered("served").heads()
-        og.excluded = [ctx.node() for ctx in repo.set('secret() or extinct()')]
+        if friend:
+            og.missingheads = repo.filtered("visible").heads()
+            og.excluded = [ctx.node() for ctx in repo.set('extinct()')]
+        else:
+            og.missingheads = repo.filtered("served").heads()
+            og.excluded = [ctx.node() for ctx in repo.set('secret() or extinct()')]
     else:
         # compute common, missing and exclude secret stuff
         sets = repo.changelog.findcommonmissing(og.commonheads, onlyheads)
@@ -125,7 +129,7 @@
         og.excluded = excluded = []
         for node in allmissing:
             ctx = repo[node]
-            if ctx.phase() >= phases.secret or ctx.extinct():
+            if (ctx.phase() >= phases.secret and not friend) or ctx.extinct():
                 excluded.append(node)
             else:
                 missing.append(node)
diff -r 4e41b2fe46cc -r 2a72585fec2c mercurial/hg.py
--- a/mercurial/hg.py	Thu Feb 13 13:05:09 2014 +0100
+++ b/mercurial/hg.py	Mon Feb 17 00:13:33 2014 +0200
@@ -555,7 +555,7 @@
 
     other = peer(repo, opts, dest)
     outgoing = discovery.findcommonoutgoing(repo.unfiltered(), other, revs,
-                                            force=opts.get('force'))
+                                            force=opts.get('force'), friend=opts.get('friend'))
     o = outgoing.missing
     if not o:
         scmutil.nochangesfound(repo.ui, repo, outgoing.excluded)


More information about the Mercurial-devel mailing list