Mercurial > hg
annotate hgext/journal.py @ 50064:b54801fec664
dirstate-guard: remove the usage in `import`
It is now redundant with the transaction spawning the same scope.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 14 Feb 2023 00:42:00 +0100 |
parents | d5116e4dc744 |
children | f642063c8147 |
rev | line source |
---|---|
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
1 # journal.py |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
2 # |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
3 # Copyright 2014-2016 Facebook, Inc. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
4 # |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
31600
809fa1d7eb99
journal: use lowercase for docstring title
Jun Wu <quark@fb.com>
parents:
31330
diff
changeset
|
7 """track previous positions of bookmarks (EXPERIMENTAL) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
8 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
9 This extension adds a new command: `hg journal`, which shows you where |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
10 bookmarks were previously located. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
11 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
12 """ |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
13 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
14 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
15 import collections |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
16 import os |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
17 import weakref |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
18 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
19 from mercurial.i18n import _ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
20 from mercurial.node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
21 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
22 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
23 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
24 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
25 from mercurial import ( |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
26 bookmarks, |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
27 cmdutil, |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
28 dispatch, |
36666
d79d68bb9f7c
py3: replace __str__ to __bytes__ in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36653
diff
changeset
|
29 encoding, |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
30 error, |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
31 extensions, |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
32 hg, |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
33 localrepo, |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
34 lock, |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35462
diff
changeset
|
35 logcmdutil, |
35000
135edf120d76
py3: handle keyword arguments in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33923
diff
changeset
|
36 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32291
diff
changeset
|
37 registrar, |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
38 util, |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
39 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36668
diff
changeset
|
40 from mercurial.utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36668
diff
changeset
|
41 dateutil, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
42 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36668
diff
changeset
|
43 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36668
diff
changeset
|
44 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
45 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
46 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32291
diff
changeset
|
47 command = registrar.command(cmdtable) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
48 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29773
diff
changeset
|
49 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
50 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
51 # be specifying the version(s) of Mercurial they are tested with, or |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
52 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
53 testedwith = b'ships-with-hg-core' |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
54 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
55 # storage format version; increment when the format changes |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
56 storageversion = 0 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
57 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
58 # namespaces |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
59 bookmarktype = b'bookmark' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
60 wdirparenttype = b'wdirparent' |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
61 # In a shared repository, what shared feature name is used |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
62 # to indicate this namespace is shared with the source? |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
63 sharednamespaces = { |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
64 bookmarktype: hg.sharedbookmarks, |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
65 } |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
66 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
67 # Journal recording, register hooks and storage object |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
68 def extsetup(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
69 extensions.wrapfunction(dispatch, b'runcommand', runcommand) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 extensions.wrapfunction(bookmarks.bmstore, b'_write', recordbookmarks) |
33384
bc1f373cf3f6
journal: use wrapfilecache instead of wrapfunction on func of filecache
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33383
diff
changeset
|
71 extensions.wrapfilecache( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
72 localrepo.localrepository, b'dirstate', wrapdirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
73 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
74 extensions.wrapfunction(hg, b'postshare', wrappostshare) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 extensions.wrapfunction(hg, b'copystore', unsharejournal) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
76 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
77 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
78 def reposetup(ui, repo): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
79 if repo.local(): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
80 repo.journal = journalstorage(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
81 repo._wlockfreeprefix.add(b'namejournal') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
82 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
83 dirstate, cached = localrepo.isfilecached(repo, b'dirstate') |
33383
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
84 if cached: |
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
85 # already instantiated dirstate isn't yet marked as |
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
86 # "journal"-ing, even though repo.dirstate() was already |
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
87 # wrapped by own wrapdirstate() |
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
88 _setupdirstate(repo, dirstate) |
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
89 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
90 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
91 def runcommand(orig, lui, repo, cmd, fullargs, *args): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
92 """Track the command line options for recording in the journal""" |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
93 journalstorage.recordcommand(*fullargs) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
94 return orig(lui, repo, cmd, fullargs, *args) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
95 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
96 |
33383
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
97 def _setupdirstate(repo, dirstate): |
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
98 dirstate.journalstorage = repo.journal |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 dirstate.addparentchangecallback(b'journal', recorddirstateparents) |
33383
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
100 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
101 |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
102 # hooks to record dirstate changes |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
103 def wrapdirstate(orig, repo): |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
104 """Make journal storage available to the dirstate object""" |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
105 dirstate = orig(repo) |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
106 if util.safehasattr(repo, 'journal'): |
33383
774beab915fe
journal: execute setup procedures for already instantiated dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
107 _setupdirstate(repo, dirstate) |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
108 return dirstate |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
109 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
110 |
29773
f2241c13d5a1
journal: use the dirstate parentchange callbacks
Mateusz Kwapich <mitrandir@fb.com>
parents:
29756
diff
changeset
|
111 def recorddirstateparents(dirstate, old, new): |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
112 """Records all dirstate parent changes in the journal.""" |
29773
f2241c13d5a1
journal: use the dirstate parentchange callbacks
Mateusz Kwapich <mitrandir@fb.com>
parents:
29756
diff
changeset
|
113 old = list(old) |
f2241c13d5a1
journal: use the dirstate parentchange callbacks
Mateusz Kwapich <mitrandir@fb.com>
parents:
29756
diff
changeset
|
114 new = list(new) |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
115 if util.safehasattr(dirstate, 'journalstorage'): |
29773
f2241c13d5a1
journal: use the dirstate parentchange callbacks
Mateusz Kwapich <mitrandir@fb.com>
parents:
29756
diff
changeset
|
116 # only record two hashes if there was a merge |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
117 oldhashes = old[:1] if old[1] == dirstate._nodeconstants.nullid else old |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
118 newhashes = new[:1] if new[1] == dirstate._nodeconstants.nullid else new |
29773
f2241c13d5a1
journal: use the dirstate parentchange callbacks
Mateusz Kwapich <mitrandir@fb.com>
parents:
29756
diff
changeset
|
119 dirstate.journalstorage.record( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
120 wdirparenttype, b'.', oldhashes, newhashes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
121 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
122 |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
123 |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
124 # hooks to record bookmark changes (both local and remote) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
125 def recordbookmarks(orig, store, fp): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
126 """Records all bookmark changes in the journal.""" |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
127 repo = store._repo |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
128 if util.safehasattr(repo, 'journal'): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
129 oldmarks = bookmarks.bmstore(repo) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
130 for mark, value in store.items(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
131 oldvalue = oldmarks.get(mark, repo.nullid) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
132 if value != oldvalue: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
133 repo.journal.record(bookmarktype, mark, oldvalue, value) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
134 return orig(store, fp) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
135 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
136 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
137 # shared repository support |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
138 def _readsharedfeatures(repo): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
139 """A set of shared features for this repository""" |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
140 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
141 return set(repo.vfs.read(b'shared').splitlines()) |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
142 except FileNotFoundError: |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
143 return set() |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
144 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
145 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
146 def _mergeentriesiter(*iterables, **kwargs): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
147 """Given a set of sorted iterables, yield the next entry in merged order |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
148 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
149 Note that by default entries go from most recent to oldest. |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
150 """ |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43115
diff
changeset
|
151 order = kwargs.pop('order', max) |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
152 iterables = [iter(it) for it in iterables] |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
153 # this tracks still active iterables; iterables are deleted as they are |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
154 # exhausted, which is why this is a dictionary and why each entry also |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
155 # stores the key. Entries are mutable so we can store the next value each |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
156 # time. |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
157 iterable_map = {} |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
158 for key, it in enumerate(iterables): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
159 try: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
160 iterable_map[key] = [next(it), key, it] |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
161 except StopIteration: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
162 # empty entry, can be ignored |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
163 pass |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
164 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
165 while iterable_map: |
48935
2cce2fa5bcf7
py3: replace pycompat.itervalues(x) with x.values()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
166 value, key, it = order(iterable_map.values()) |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
167 yield value |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
168 try: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
169 iterable_map[key][0] = next(it) |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
170 except StopIteration: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
171 # this iterable is empty, remove it from consideration |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
172 del iterable_map[key] |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
173 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
174 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
175 def wrappostshare(orig, sourcerepo, destrepo, **kwargs): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
176 """Mark this shared working copy as sharing journal information""" |
29756
46d9a5bb2fb0
journal: take wlock for writting the 'shared' file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29679
diff
changeset
|
177 with destrepo.wlock(): |
46d9a5bb2fb0
journal: take wlock for writting the 'shared' file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29679
diff
changeset
|
178 orig(sourcerepo, destrepo, **kwargs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 with destrepo.vfs(b'shared', b'a') as fp: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
180 fp.write(b'journal\n') |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
181 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
182 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
183 def unsharejournal(orig, ui, repo, repopath): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
184 """Copy shared journal entries into this repo when unsharing""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
185 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
186 repo.path == repopath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
187 and repo.shared() |
43115
4aa72cdf616f
py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
188 and util.safehasattr(repo, 'journal') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
189 ): |
36159
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35954
diff
changeset
|
190 sharedrepo = hg.sharedreposource(repo) |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
191 sharedfeatures = _readsharedfeatures(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 if sharedrepo and sharedfeatures > {b'journal'}: |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
193 # there is a shared repository and there are shared journal entries |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
194 # to copy. move shared date over from source to destination but |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
195 # move the local file first |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
196 if repo.vfs.exists(b'namejournal'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
197 journalpath = repo.vfs.join(b'namejournal') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 util.rename(journalpath, journalpath + b'.bak') |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
199 storage = repo.journal |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
200 local = storage._open( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
201 repo.vfs, filename=b'namejournal.bak', _newestfirst=False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
202 ) |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
203 shared = ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
204 e |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
205 for e in storage._open(sharedrepo.vfs, _newestfirst=False) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
206 if sharednamespaces.get(e.namespace) in sharedfeatures |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
207 ) |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
208 for entry in _mergeentriesiter(local, shared, order=min): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
209 storage._write(repo.vfs, entry) |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
210 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
211 return orig(ui, repo, repopath) |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
212 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
213 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
214 class journalentry( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
215 collections.namedtuple( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43115
diff
changeset
|
216 'journalentry', |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43115
diff
changeset
|
217 'timestamp user command namespace name oldhashes newhashes', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
218 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
219 ): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
220 """Individual journal entry |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
221 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
222 * timestamp: a mercurial (time, timezone) tuple |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
223 * user: the username that ran the command |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
224 * namespace: the entry namespace, an opaque string |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
225 * name: the name of the changed item, opaque string with meaning in the |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
226 namespace |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
227 * command: the hg command that triggered this record |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
228 * oldhashes: a tuple of one or more binary hashes for the old location |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
229 * newhashes: a tuple of one or more binary hashes for the new location |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
230 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
231 Handles serialisation from and to the storage format. Fields are |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
232 separated by newlines, hashes are written out in hex separated by commas, |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
233 timestamp and timezone are separated by a space. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
234 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
235 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
236 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
237 @classmethod |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
238 def fromstorage(cls, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
239 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
240 time, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
241 user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
242 command, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
243 namespace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
244 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
245 oldhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
246 newhashes, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 ) = line.split(b'\n') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
248 timestamp, tz = time.split() |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
249 timestamp, tz = float(timestamp), int(tz) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
250 oldhashes = tuple(bin(hash) for hash in oldhashes.split(b',')) |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
251 newhashes = tuple(bin(hash) for hash in newhashes.split(b',')) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
252 return cls( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
253 (timestamp, tz), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
254 user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
255 command, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
256 namespace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
257 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
258 oldhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
259 newhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
260 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
261 |
36666
d79d68bb9f7c
py3: replace __str__ to __bytes__ in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36653
diff
changeset
|
262 def __bytes__(self): |
d79d68bb9f7c
py3: replace __str__ to __bytes__ in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36653
diff
changeset
|
263 """bytes representation for storage""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
264 time = b' '.join(map(pycompat.bytestr, self.timestamp)) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
265 oldhashes = b','.join([hex(hash) for hash in self.oldhashes]) |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
43506
diff
changeset
|
266 newhashes = b','.join([hex(hash) for hash in self.newhashes]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 return b'\n'.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
268 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
269 time, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
270 self.user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
271 self.command, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
272 self.namespace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
273 self.name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
274 oldhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
275 newhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
276 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
277 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
278 |
36666
d79d68bb9f7c
py3: replace __str__ to __bytes__ in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36653
diff
changeset
|
279 __str__ = encoding.strmethod(__bytes__) |
d79d68bb9f7c
py3: replace __str__ to __bytes__ in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36653
diff
changeset
|
280 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
281 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48935
diff
changeset
|
282 class journalstorage: |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
283 """Storage for journal entries |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
284 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
285 Entries are divided over two files; one with entries that pertain to the |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
286 local working copy *only*, and one with entries that are shared across |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
287 multiple working copies when shared using the share extension. |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
288 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
289 Entries are stored with NUL bytes as separators. See the journalentry |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
290 class for the per-entry structure. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
291 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
292 The file format starts with an integer version, delimited by a NUL. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
293 |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
294 This storage uses a dedicated lock; this makes it easier to avoid issues |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
295 with adding entries that added when the regular wlock is unlocked (e.g. |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
296 the dirstate). |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
297 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
298 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
299 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
300 _currentcommand = () |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
301 _lockref = None |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
302 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
303 def __init__(self, repo): |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
304 self.user = procutil.getuser() |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
305 self.ui = repo.ui |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
306 self.vfs = repo.vfs |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
307 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
308 # is this working copy using a shared storage? |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
309 self.sharedfeatures = self.sharedvfs = None |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
310 if repo.shared(): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
311 features = _readsharedfeatures(repo) |
36159
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35954
diff
changeset
|
312 sharedrepo = hg.sharedreposource(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 if sharedrepo is not None and b'journal' in features: |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
314 self.sharedvfs = sharedrepo.vfs |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
315 self.sharedfeatures = features |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
316 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
317 # track the current command for recording in journal entries |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
318 @property |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
319 def command(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
320 commandstr = b' '.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
321 map(procutil.shellquote, journalstorage._currentcommand) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
322 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
323 if b'\n' in commandstr: |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
324 # truncate multi-line commands |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
325 commandstr = commandstr.partition(b'\n')[0] + b' ...' |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
326 return commandstr |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
327 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
328 @classmethod |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
329 def recordcommand(cls, *fullargs): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
330 """Set the current hg arguments, stored with recorded entries""" |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
331 # Set the current command on the class because we may have started |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
332 # with a non-local repo (cloning for example). |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
333 cls._currentcommand = fullargs |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
334 |
29928
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
335 def _currentlock(self, lockref): |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
336 """Returns the lock if it's held, or None if it's not. |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
337 |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
338 (This is copied from the localrepo class) |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
339 """ |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
340 if lockref is None: |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
341 return None |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
342 l = lockref() |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
343 if l is None or not l.held: |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
344 return None |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
345 return l |
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
346 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
347 def jlock(self, vfs): |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
348 """Create a lock for the journal file""" |
29928
e5a97ec6ebb8
journal: properly check for held lock (issue5349)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29870
diff
changeset
|
349 if self._currentlock(self._lockref) is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 raise error.Abort(_(b'journal lock does not support nesting')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 desc = _(b'journal of %s') % vfs.base |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
352 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
353 l = lock.lock(vfs, b'namejournal.lock', 0, desc=desc) |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
354 except error.LockHeld as inst: |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
355 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 _(b"waiting for lock on %s held by %r\n") % (desc, inst.locker) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
357 ) |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
358 # default to 600 seconds timeout |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
359 l = lock.lock( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
360 vfs, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
361 b'namejournal.lock', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
362 self.ui.configint(b"ui", b"timeout"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
363 desc=desc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
364 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
365 self.ui.warn(_(b"got lock after %s seconds\n") % l.delay) |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
366 self._lockref = weakref.ref(l) |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
367 return l |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
368 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
369 def record(self, namespace, name, oldhashes, newhashes): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
370 """Record a new journal entry |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
371 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
372 * namespace: an opaque string; this can be used to filter on the type |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
373 of recorded entries. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
374 * name: the name defining this entry; for bookmarks, this is the |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
375 bookmark name. Can be filtered on when retrieving entries. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
376 * oldhashes and newhashes: each a single binary hash, or a list of |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
377 binary hashes. These represent the old and new position of the named |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
378 item. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
379 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
380 """ |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
381 if not isinstance(oldhashes, list): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
382 oldhashes = [oldhashes] |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
383 if not isinstance(newhashes, list): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
384 newhashes = [newhashes] |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
385 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
386 entry = journalentry( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
387 dateutil.makedate(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
388 self.user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
389 self.command, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
390 namespace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
391 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
392 oldhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
393 newhashes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
394 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
395 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
396 vfs = self.vfs |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
397 if self.sharedvfs is not None: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
398 # write to the shared repository if this feature is being |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
399 # shared between working copies. |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
400 if sharednamespaces.get(namespace) in self.sharedfeatures: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
401 vfs = self.sharedvfs |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
402 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
403 self._write(vfs, entry) |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
404 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
405 def _write(self, vfs, entry): |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
406 with self.jlock(vfs): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
407 # open file in amend mode to ensure it is created if missing |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
408 with vfs(b'namejournal', mode=b'a+b') as f: |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
409 f.seek(0, os.SEEK_SET) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
410 # Read just enough bytes to get a version number (up to 2 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
411 # digits plus separator) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
412 version = f.read(3).partition(b'\0')[0] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
413 if version and version != b"%d" % storageversion: |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
414 # different version of the storage. Exit early (and not |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
415 # write anything) if this is not a version we can handle or |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
416 # the file is corrupt. In future, perhaps rotate the file |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
417 # instead? |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
418 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
419 _(b"unsupported journal file version '%s'\n") % version |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
420 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
421 return |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
422 if not version: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
423 # empty file, write version first |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
424 f.write((b"%d" % storageversion) + b'\0') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
425 f.seek(0, os.SEEK_END) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
426 f.write(bytes(entry) + b'\0') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
427 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
428 def filtered(self, namespace=None, name=None): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
429 """Yield all journal entries with the given namespace or name |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
430 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
431 Both the namespace and the name are optional; if neither is given all |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
432 entries in the journal are produced. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
433 |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
434 Matching supports regular expressions by using the `re:` prefix |
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
435 (use `literal:` to match names or namespaces that start with `re:`) |
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
436 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
437 """ |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
438 if namespace is not None: |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36668
diff
changeset
|
439 namespace = stringutil.stringmatcher(namespace)[-1] |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
440 if name is not None: |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36668
diff
changeset
|
441 name = stringutil.stringmatcher(name)[-1] |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
442 for entry in self: |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
443 if namespace is not None and not namespace(entry.namespace): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
444 continue |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
445 if name is not None and not name(entry.name): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
446 continue |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
447 yield entry |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
448 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
449 def __iter__(self): |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
450 """Iterate over the storage |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
451 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
452 Yields journalentry instances for each contained journal record. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
453 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
454 """ |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
455 local = self._open(self.vfs) |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
456 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
457 if self.sharedvfs is None: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
458 return local |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
459 |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
460 # iterate over both local and shared entries, but only those |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
461 # shared entries that are among the currently shared features |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
462 shared = ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
463 e |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
464 for e in self._open(self.sharedvfs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
465 if sharednamespaces.get(e.namespace) in self.sharedfeatures |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
466 ) |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
467 return _mergeentriesiter(local, shared) |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
468 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
469 def _open(self, vfs, filename=b'namejournal', _newestfirst=True): |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
470 if not vfs.exists(filename): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
471 return |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
472 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
473 with vfs(filename) as f: |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
474 raw = f.read() |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
475 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
476 lines = raw.split(b'\0') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
477 version = lines and lines[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
478 if version != b"%d" % storageversion: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
479 version = version or _(b'not available') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
480 raise error.Abort(_(b"unknown journal file version '%s'") % version) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
481 |
29503
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
482 # Skip the first line, it's a version number. Normally we iterate over |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
483 # these in reverse order to list newest first; only when copying across |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
484 # a shared storage do we forgo reversing. |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
485 lines = lines[1:] |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
486 if _newestfirst: |
0103b673d6ca
journal: add share extension support
Martijn Pieters <mjpieters@fb.com>
parents:
29502
diff
changeset
|
487 lines = reversed(lines) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
488 for line in lines: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
489 if not line: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
490 continue |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
491 yield journalentry.fromstorage(line) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
492 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
493 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
494 # journal reading |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
495 # log options that don't make sense for journal |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
496 _ignoreopts = (b'no-merges', b'graph') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
497 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
498 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
499 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
500 b'journal', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
501 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 (b'', b'all', None, b'show history for all names'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
503 (b'c', b'commits', None, b'show commit metadata'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
504 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
505 + [opt for opt in cmdutil.logopts if opt[1] not in _ignoreopts], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
506 b'[OPTION]... [BOOKMARKNAME]', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
507 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
508 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
509 def journal(ui, repo, *args, **opts): |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
510 """show the previous position of bookmarks and the working copy |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
511 |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
512 The journal is used to see the previous commits that bookmarks and the |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
513 working copy pointed to. By default the previous locations for the working |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
514 copy. Passing a bookmark name will show all the previous positions of |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
515 that bookmark. Use the --all switch to show previous locations for all |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
516 bookmarks and the working copy; each line will then include the bookmark |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
517 name, or '.' for the working copy, as well. |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
518 |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
519 If `name` starts with `re:`, the remainder of the name is treated as |
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
520 a regular expression. To match a name that actually starts with `re:`, |
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
521 use the prefix `literal:`. |
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
522 |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
523 By default hg journal only shows the commit hash and the command that was |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
524 running at that time. -v/--verbose will show the prior hash, the user, and |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
525 the time at which it happened. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
526 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
527 Use -c/--commits to output log information on each commit hash; at this |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
528 point you can use the usual `--patch`, `--git`, `--stat` and `--template` |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
529 switches to alter the log output for these. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
530 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
531 `hg journal -T json` can be used to produce machine readable output. |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
532 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
533 """ |
35000
135edf120d76
py3: handle keyword arguments in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33923
diff
changeset
|
534 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
535 name = b'.' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
536 if opts.get(b'all'): |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
537 if args: |
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
538 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 _(b"You can't combine --all and filtering on a name") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
540 ) |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
541 name = None |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
542 if args: |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
543 name = args[0] |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
544 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
545 fm = ui.formatter(b'journal', opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
546 |
39702
a7b91509776d
journal: inline formatted nodes and date into expression
Yuya Nishihara <yuya@tcha.org>
parents:
39701
diff
changeset
|
547 def formatnodes(nodes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
548 return fm.formatlist(map(fm.hexfunc, nodes), name=b'node', sep=b',') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
549 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 if opts.get(b"template") != b"json": |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
551 if name is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
552 displayname = _(b'the working copy and bookmarks') |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
553 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 displayname = b"'%s'" % name |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 ui.status(_(b"previous locations of %s:\n") % displayname) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
556 |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35462
diff
changeset
|
557 limit = logcmdutil.getlimit(opts) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
558 entry = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 ui.pager(b'journal') |
29502
8361131b4768
journal: add dirstate tracking
Martijn Pieters <mjpieters@fb.com>
parents:
29443
diff
changeset
|
560 for count, entry in enumerate(repo.journal.filtered(name=name)): |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
561 if count == limit: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
562 break |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
563 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
564 fm.startitem() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
565 fm.condwrite( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
566 ui.verbose, b'oldnodes', b'%s -> ', formatnodes(entry.oldhashes) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
567 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 fm.write(b'newnodes', b'%s', formatnodes(entry.newhashes)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
569 fm.condwrite(ui.verbose, b'user', b' %-8s', entry.user) |
49860
d5116e4dc744
typing: disable an attribute-error warning in the journal extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
570 |
d5116e4dc744
typing: disable an attribute-error warning in the journal extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
571 # ``name`` is bytes, or None only if 'all' was an option. |
29504
7503d8874617
journal: add support for seaching by pattern
Martijn Pieters <mjpieters@fb.com>
parents:
29503
diff
changeset
|
572 fm.condwrite( |
49860
d5116e4dc744
typing: disable an attribute-error warning in the journal extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
573 # pytype: disable=attribute-error |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
574 opts.get(b'all') or name.startswith(b're:'), |
49860
d5116e4dc744
typing: disable an attribute-error warning in the journal extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
49306
diff
changeset
|
575 # pytype: enable=attribute-error |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
576 b'name', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
577 b' %-8s', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
578 entry.name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
579 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
580 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
581 fm.condwrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
582 ui.verbose, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
583 b'date', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
584 b' %s', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
585 fm.formatdate(entry.timestamp, b'%Y-%m-%d %H:%M %1%2'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
586 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
587 fm.write(b'command', b' %s\n', entry.command) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
588 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
589 if opts.get(b"commits"): |
39704
aa647457df14
journal: use changesetformatter to properly nest list of commits in JSON
Yuya Nishihara <yuya@tcha.org>
parents:
39703
diff
changeset
|
590 if fm.isplain(): |
aa647457df14
journal: use changesetformatter to properly nest list of commits in JSON
Yuya Nishihara <yuya@tcha.org>
parents:
39703
diff
changeset
|
591 displayer = logcmdutil.changesetdisplayer(ui, repo, opts) |
aa647457df14
journal: use changesetformatter to properly nest list of commits in JSON
Yuya Nishihara <yuya@tcha.org>
parents:
39703
diff
changeset
|
592 else: |
aa647457df14
journal: use changesetformatter to properly nest list of commits in JSON
Yuya Nishihara <yuya@tcha.org>
parents:
39703
diff
changeset
|
593 displayer = logcmdutil.changesetformatter( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
594 ui, repo, fm.nested(b'changesets'), diffopts=opts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41834
diff
changeset
|
595 ) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
596 for hash in entry.newhashes: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
597 try: |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
598 ctx = repo[hash] |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
599 displayer.show(ctx) |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
600 except error.RepoLookupError as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
601 fm.plain(b"%s\n\n" % pycompat.bytestr(e)) |
29443
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
602 displayer.close() |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
603 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
604 fm.end() |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
605 |
cf092a3d202a
journal: new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
diff
changeset
|
606 if entry is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
607 ui.status(_(b"no recorded locations\n")) |