[PATCH] discovery: factor out calculation of heads to not warn about

Ryan McElroy rm at fb.com
Fri Nov 6 11:47:36 CST 2015


On 11/5/2015 6:37 AM, Augie Fackler wrote:
> On Wed, Nov 04, 2015 at 06:18:49PM -0800, Ryan McElroy wrote:
>> # HG changeset patch
>> # User Ryan McElroy <rmcelroy at fb.com>
>> # Date 1446688886 28800
>> #      Wed Nov 04 18:01:26 2015 -0800
>> # Node ID abe2392dfbee03f82c3e47974e929b3dbddb6ec3
>> # Parent  f9984f76fd90e439221425d751e29bae17bec995
>> discovery: factor out calculation of heads to not warn about
> Queued, with a typo fix (towrds) in the log message. Thanks!

Crap I sent an unfixed version of this (I had it fixed in my workdir so 
tests passed but forgot to amend, so this is broken). I'll send a v2 
shortly (will also fix commit message).

>
>> In addition to taking a step towrds getting an unreasonably large function
>> factored into smaller, more manageable functions, this will allow extensions
>> such as remotenames have more control over what pushes are allowed or not.
>>
>> diff --git a/mercurial/discovery.py b/mercurial/discovery.py
>> --- a/mercurial/discovery.py
>> +++ b/mercurial/discovery.py
>> @@ -238,6 +238,23 @@ def _oldheadssummary(repo, remoteheads,
>>           unsynced = set()
>>       return {None: (oldheads, newheads, unsynced)}
>>
>> +def _nowarnheads(repo, remote):
>> +    # Compute newly pushed bookmarks. We don't warn about bookmarked heads.
>> +    localbookmarks = repo._bookmarks
>> +    remotebookmarks = remote.listkeys('bookmarks')
>> +    bookmarkedheads = set()
>> +    for bm in localbookmarks:
>> +        rnode = remotebookmarks.get(bm)
>> +        if rnode and rnode in repo:
>> +            lctx, rctx = repo[bm], repo[rnode]
>> +            if bookmarks.validdest(repo, rctx, lctx):
>> +                bookmarkedheads.add(lctx.node())
>> +        else:
>> +            if bm in newbookmarks and bm not in remotebookmarks:
>> +                bookmarkedheads.add(repo[bm].node())
>> +
>> +    return bookmarkedheads
>> +
>>   def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False,
>>                  newbookmarks=[]):
>>       """Check that a push won't add any outgoing head
>> @@ -268,19 +285,8 @@ def checkheads(repo, remote, outgoing, r
>>                            hint=_("use 'hg push --new-branch' to create"
>>                                   " new remote branches"))
>>
>> -    # 2. Compute newly pushed bookmarks. We don't warn about bookmarked heads.
>> -    localbookmarks = repo._bookmarks
>> -    remotebookmarks = remote.listkeys('bookmarks')
>> -    bookmarkedheads = set()
>> -    for bm in localbookmarks:
>> -        rnode = remotebookmarks.get(bm)
>> -        if rnode and rnode in repo:
>> -            lctx, rctx = repo[bm], repo[rnode]
>> -            if bookmarks.validdest(repo, rctx, lctx):
>> -                bookmarkedheads.add(lctx.node())
>> -        else:
>> -            if bm in newbookmarks and bm not in remotebookmarks:
>> -                bookmarkedheads.add(repo[bm].node())
>> +    # 2. Find heads that we need not warn about
>> +    nowarnheads = _nowarnheads(repo, remote)
>>
>>       # 3. Check for new heads.
>>       # If there are more heads after the push than before, a suitable
>> @@ -366,7 +372,7 @@ def checkheads(repo, remote, outgoing, r
>>                                " pushing new heads")
>>           elif len(newhs) > len(oldhs):
>>               # remove bookmarked or existing remote heads from the new heads list
>> -            dhs = sorted(newhs - bookmarkedheads - oldhs)
>> +            dhs = sorted(newhs - nowarnheads - oldhs)
>>           if dhs:
>>               if errormsg is None:
>>                   if branch not in ('default', None):
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list