Mercurial > hg
annotate mercurial/stack.py @ 46184:cb8b2ee89a5d
copies: stop attempt to avoid extra dict copies around branching
In the python code, we attempt to avoid unnecessary dict copies when gathering
copy information. However that logic is wobbly and I keep running into case
where independent branches affects each others.
With the current code we can't ensure we are the only "user" of dict when
dealing with merge.
This caused havoc in the next series on tests I am about to introduce.
So for now I am disabling the faulty optimisation. I believe we will need a
dedicated overlay to deal with the "copy on write logic" to have something
correct. I am also hoping to find time to build dedicated test case for this
category of problem instead of relying on side effect in other tests. However
for now I am focussing on another issue.
Differential Revision: https://phab.mercurial-scm.org/D9608
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 15 Dec 2020 00:29:29 +0100 |
parents | 687b865b95ad |
children | d4ba4d51f85f |
rev | line source |
---|---|
37000
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
1 # stack.py - Mercurial functions for stack definition |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
2 # |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
3 # Copyright Matt Mackall <mpm@selenic.com> and other |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
4 # |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
7 |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
8 from __future__ import absolute_import |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
9 |
43075
57875cf423c9
style: run a patched black on a subset of mercurial
Augie Fackler <augie@google.com>
parents:
42960
diff
changeset
|
10 |
37000
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
11 def getstack(repo, rev=None): |
37004
68fcc5503ec5
stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents:
37000
diff
changeset
|
12 """return a sorted smartrev of the stack containing either rev if it is |
68fcc5503ec5
stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents:
37000
diff
changeset
|
13 not None or the current working directory parent. |
37000
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
14 |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
15 The stack will always contain all drafts changesets which are ancestors to |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
16 the revision and are not merges. |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
17 """ |
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
18 if rev is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43075
diff
changeset
|
19 rev = b'.' |
37000
40583c7afd63
stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
20 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43075
diff
changeset
|
21 revspec = b'only(%s) and not public() and not ::merge()' |
42960
763028fc6a69
stack: use repo.revs() instead of revsetlang.formatspec() + scmutil.revrange()
Anton Shestakov <av6@dwimlabs.net>
parents:
42698
diff
changeset
|
22 revisions = repo.revs(revspec, rev) |
37004
68fcc5503ec5
stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents:
37000
diff
changeset
|
23 revisions.sort() |
68fcc5503ec5
stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents:
37000
diff
changeset
|
24 return revisions |