# HG changeset patch # User Pierre-Yves David # Date 1346673919 -7200 # Node ID fdd0fc046cf11a173dbe7731f3eef745eb554383 # Parent 9dbd5fa6d30184679e573d433bf202e87534d189 clfilter: introduce a `hassecret` function We can only use copy clone if the cloned repo do not have any secret changeset. The current method for that is to run the "secret()" revset on the remote repo. But with proper filtering of hidden or unserved revision by the remote this revset won't return any revision even if some exist remotely. This changeset adds an explicit function to know if a repo have any secret revision or not. The other option would be to disable filtering for the query but I prefer the approach above, lighter both regarding code and performance. diff -r 9dbd5fa6d301 -r fdd0fc046cf1 mercurial/hg.py --- a/mercurial/hg.py Mon Sep 03 14:03:38 2012 +0200 +++ b/mercurial/hg.py Mon Sep 03 14:05:19 2012 +0200 @@ -10,7 +10,7 @@ from lock import release from node import hex, nullid import localrepo, bundlerepo, httppeer, sshpeer, statichttprepo, bookmarks -import lock, util, extensions, error, node, scmutil +import lock, util, extensions, error, node, scmutil, phases import cmdutil, discovery import merge as mergemod import verify as verifymod @@ -303,7 +303,7 @@ copy = False if (srcrepo and srcrepo.cancopy() and islocal(dest) - and not srcrepo.revs("secret()")): + and not phases.hassecret(srcrepo)): copy = not pull and not rev if copy: diff -r 9dbd5fa6d301 -r fdd0fc046cf1 mercurial/phases.py --- a/mercurial/phases.py Mon Sep 03 14:03:38 2012 +0200 +++ b/mercurial/phases.py Mon Sep 03 14:05:19 2012 +0200 @@ -388,3 +388,6 @@ msg = _("phases.new-commit: not a valid phase name ('%s')") raise error.ConfigError(msg % v) +def hassecret(repo): + """utility function that check if a repo have any secret changeset.""" + return bool(repo._phasecache.phaseroots[2])