Mercurial > hg-git
annotate hggit/__init__.py @ 1105:bb255eaf3d14
compat: update testedwith for hg 4.5 release
author | Kevin Bullock <kbullock@ringworld.org> |
---|---|
date | Tue, 06 Feb 2018 12:12:49 -0600 |
parents | c06d4656b77b |
children | 8ed6c0cae9b8 b90c69681d2d |
rev | line source |
---|---|
0
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
1 # git.py - git server bridge |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
2 # |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2008 Scott Chacon <schacon at gmail dot com> |
250 | 4 # also some code (and help) borrowed from durin42 |
0
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
5 # |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
7 # of the GNU General Public License, incorporated herein by reference. |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
8 |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
9 '''push and pull from a Git server |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
10 |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
11 This extension lets you communicate (push and pull) with a Git server. |
250 | 12 This way you can use Git hosting for your project or collaborate with a |
0
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
13 project that is in Git. A bridger of worlds, this plugin be. |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
14 |
250 | 15 Try hg clone git:// or hg clone git+ssh:// |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
16 |
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
17 For more information and instructions, see :hg:`help git` |
0
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
18 ''' |
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
19 |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
20 # global modules |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
21 import os |
912
5cc9594cc811
Add version info to hggit for "hg --version -v"
anatoly techtonik <techtonik@gmail.com>
parents:
909
diff
changeset
|
22 |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
23 # local modules |
1062
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1047
diff
changeset
|
24 import compat |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
25 import gitrepo |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
26 import hgrepo |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
27 import overlay |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
28 import verify |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
29 import util |
912
5cc9594cc811
Add version info to hggit for "hg --version -v"
anatoly techtonik <techtonik@gmail.com>
parents:
909
diff
changeset
|
30 |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
31 from bisect import insort |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
32 from git_handler import GitHandler |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
33 from mercurial.node import hex |
999
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
34 from mercurial.error import LookupError |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
35 from mercurial.i18n import _ |
959
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
36 from mercurial import ( |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
37 bundlerepo, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
38 cmdutil, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
39 demandimport, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
40 dirstate, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
41 discovery, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
42 extensions, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
43 help, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
44 hg, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
45 ui as hgui, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
46 util as hgutil, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
47 localrepo, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
48 manifest, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
49 revset, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
50 scmutil, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
51 templatekw, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
52 ) |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
53 |
782
e5450a81676e
__init__: work around exchange not yet existing in hg 2.8.x
Augie Fackler <raf@durin42.com>
parents:
781
diff
changeset
|
54 try: |
e5450a81676e
__init__: work around exchange not yet existing in hg 2.8.x
Augie Fackler <raf@durin42.com>
parents:
781
diff
changeset
|
55 from mercurial import exchange |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
56 exchange.push # existed in first iteration of this file |
956
06385a2b30f3
init: handle AttributeError in addition to ImportError
timeless@gmail.com
parents:
953
diff
changeset
|
57 except (AttributeError, ImportError): |
782
e5450a81676e
__init__: work around exchange not yet existing in hg 2.8.x
Augie Fackler <raf@durin42.com>
parents:
781
diff
changeset
|
58 # We only *use* the exchange module in hg 3.2+, so this is safe |
e5450a81676e
__init__: work around exchange not yet existing in hg 2.8.x
Augie Fackler <raf@durin42.com>
parents:
781
diff
changeset
|
59 pass |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
60 |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
61 try: |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
62 from mercurial import ignore |
909
67b27ec080ae
ignore: evaluate ignore.readpats to see if ignore module really exists
Yuya Nishihara <yuya@tcha.org>
parents:
907
diff
changeset
|
63 ignore.readpats |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
64 ignoremod = True |
956
06385a2b30f3
init: handle AttributeError in addition to ImportError
timeless@gmail.com
parents:
953
diff
changeset
|
65 except (AttributeError, ImportError): |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
66 # The ignore module disappeared in Mercurial 3.5 |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
67 ignoremod = False |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
68 |
937
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
69 baseset = set |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
70 try: |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
71 baseset = revset.baseset |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
72 except AttributeError: |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
73 # baseset was added in hg 3.0 |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
74 pass |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
75 |
362
5b6961384ee2
demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents:
352
diff
changeset
|
76 demandimport.ignore.extend([ |
5b6961384ee2
demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents:
352
diff
changeset
|
77 'collections', |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
78 ]) |
0
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
79 |
1075
6ef27582bfa5
version: bump version number to 0.8.10
Kevin Bullock <kbullock@ringworld.org>
parents:
1074
diff
changeset
|
80 __version__ = '0.8.10' |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
81 |
993
1fec6463922b
tests: update list of hg versions we've tested with
Kevin Bullock <kbullock@ringworld.org>
parents:
985
diff
changeset
|
82 testedwith = ('2.8.2 2.9.2 3.0.2 3.1.2 3.2.4 3.3.3 3.4.2 3.5.2 3.6.3 3.7.3' |
1105
bb255eaf3d14
compat: update testedwith for hg 4.5 release
Kevin Bullock <kbullock@ringworld.org>
parents:
1088
diff
changeset
|
83 '3.8.4 3.9.2 4.0.2 4.1.3 4.2.3 4.3.3 4.4.2 4.5') |
545 | 84 buglink = 'https://bitbucket.org/durin42/hg-git/issues' |
85 | |
732
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
86 cmdtable = {} |
1062
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1047
diff
changeset
|
87 configtable = {} |
1020
f2118a7dd764
commands: update to use registrar
Durham Goode <durham@fb.com>
parents:
1018
diff
changeset
|
88 try: |
f2118a7dd764
commands: update to use registrar
Durham Goode <durham@fb.com>
parents:
1018
diff
changeset
|
89 from mercurial import registrar |
f2118a7dd764
commands: update to use registrar
Durham Goode <durham@fb.com>
parents:
1018
diff
changeset
|
90 command = registrar.command(cmdtable) |
1062
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1047
diff
changeset
|
91 configitem = registrar.configitem(configtable) |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1047
diff
changeset
|
92 compat.registerconfigs(configitem) |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1047
diff
changeset
|
93 |
1020
f2118a7dd764
commands: update to use registrar
Durham Goode <durham@fb.com>
parents:
1018
diff
changeset
|
94 except (ImportError, AttributeError): |
f2118a7dd764
commands: update to use registrar
Durham Goode <durham@fb.com>
parents:
1018
diff
changeset
|
95 command = cmdutil.command(cmdtable) |
732
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
96 |
60
05a96f7750ad
add support for `hg clone git://github.com/defunkt/facebox.git`
Chris Wanstrath <chris@ozmm.org>
parents:
59
diff
changeset
|
97 # support for `hg clone git://github.com/defunkt/facebox.git` |
168
8bfa8aa6b68f
added empty changelog handling
Scott Chacon <schacon@gmail.com>
parents:
165
diff
changeset
|
98 # also hg clone git+ssh://git@github.com/schacon/simplegit.git |
919
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
99 for _scheme in util.gitschemes: |
439
3f45c88100e8
add support for the HTTP smart protocol when using Dulwich tip
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
430
diff
changeset
|
100 hg.schemes[_scheme] = gitrepo |
180
682863000e9a
Make it possible to clone/pull from bundle repositories
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
175
diff
changeset
|
101 |
256
442fe2ca104d
Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents:
220
diff
changeset
|
102 # support for `hg clone localgitrepo` |
220
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
103 _oldlocal = hg.schemes['file'] |
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
104 |
388
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
105 try: |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
106 urlcls = hgutil.url |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
107 except AttributeError: |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
108 class urlcls(object): |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
109 def __init__(self, path): |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
110 self.p = hgutil.drop_scheme('file', path) |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
111 |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
112 def localpath(self): |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
113 return self.p |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
114 |
935
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
115 def _isgitdir(path): |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
116 """True if the given file path is a git repo.""" |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
117 if os.path.exists(os.path.join(path, '.hg')): |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
118 return False |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
119 |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
120 if os.path.exists(os.path.join(path, '.git')): |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
121 # is full git repo |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
122 return True |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
123 |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
124 if (os.path.exists(os.path.join(path, 'HEAD')) and |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
125 os.path.exists(os.path.join(path, 'objects')) and |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
126 os.path.exists(os.path.join(path, 'refs'))): |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
127 # is bare git repo |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
128 return True |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
129 |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
130 return False |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
131 |
220
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
132 def _local(path): |
388
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
133 p = urlcls(path).localpath() |
935
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
134 if _isgitdir(p): |
263
9f5a7a5d52aa
Enable detection of bare repositories as a local git repo
Lincoln Stoll <lstoll@lstoll.net>
parents:
260
diff
changeset
|
135 return gitrepo |
922
ee9017a3c269
init: test for raw git ssh paths
Sean Farley <sean@farley.io>
parents:
919
diff
changeset
|
136 # detect git ssh urls (which mercurial thinks is a file-like path) |
ee9017a3c269
init: test for raw git ssh paths
Sean Farley <sean@farley.io>
parents:
919
diff
changeset
|
137 if util.isgitsshuri(p): |
ee9017a3c269
init: test for raw git ssh paths
Sean Farley <sean@farley.io>
parents:
919
diff
changeset
|
138 return gitrepo |
256
442fe2ca104d
Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents:
220
diff
changeset
|
139 return _oldlocal(path) |
220
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
140 |
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
141 hg.schemes['file'] = _local |
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
142 |
938
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
143 # we need to wrap this so that git-like ssh paths are not prepended with a |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
144 # local filesystem path. ugh. |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
145 def _url(orig, path, **kwargs): |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
146 # we'll test for 'git@' then use our heuristic method to determine if it's |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
147 # a git uri |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
148 if not (path.startswith(os.sep) and ':' in path): |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
149 return orig(path, **kwargs) |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
150 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
151 # the file path will be everything up until the last slash right before the |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
152 # ':' |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
153 lastsep = path.rindex(os.sep, None, path.index(':')) + 1 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
154 gituri = path[lastsep:] |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
155 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
156 if util.isgitsshuri(gituri): |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
157 return orig(gituri, **kwargs) |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
158 return orig(path, **kwargs) |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
159 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
160 extensions.wrapfunction(hgutil, 'url', _url) |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
161 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
162 |
923
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
163 def _httpgitwrapper(orig): |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
164 # we should probably test the connection but for now, we just keep it |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
165 # simple and check for a url ending in '.git' |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
166 def httpgitscheme(uri): |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
167 if uri.endswith('.git'): |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
168 return gitrepo |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
169 |
924
7c80e9f8131f
init: fix default hg breakage by returning the right type
Sean Farley <sean@farley.io>
parents:
923
diff
changeset
|
170 # the http(s) scheme just returns the _peerlookup |
7c80e9f8131f
init: fix default hg breakage by returning the right type
Sean Farley <sean@farley.io>
parents:
923
diff
changeset
|
171 return orig |
923
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
172 |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
173 return httpgitscheme |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
174 |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
175 hg.schemes['https'] = _httpgitwrapper(hg.schemes['https']) |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
176 hg.schemes['http'] = _httpgitwrapper(hg.schemes['http']) |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
177 |
281
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
178 hgdefaultdest = hg.defaultdest |
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
179 def defaultdest(source): |
919
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
180 for scheme in util.gitschemes: |
281
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
181 if source.startswith('%s://' % scheme) and source.endswith('.git'): |
919
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
182 return hgdefaultdest(source[:-4]) |
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
183 |
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
184 if source.endswith('.git'): |
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
185 return hgdefaultdest(source[:-4]) |
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
186 |
281
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
187 return hgdefaultdest(source) |
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
188 hg.defaultdest = defaultdest |
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
189 |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
190 def getversion(): |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
191 """return version with dependencies for hg --version -v""" |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
192 import dulwich |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
193 dulver = '.'.join(str(i) for i in dulwich.__version__) |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
194 return __version__ + (" (dulwich %s)" % dulver) |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
195 |
297
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
196 # defend against tracebacks if we specify -r in 'hg pull' |
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
197 def safebranchrevs(orig, lrepo, repo, branches, revs): |
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
198 revs, co = orig(lrepo, repo, branches, revs) |
706
5e74edb7a62d
safebranchrevs: handle changelog having no commits
Siddharth Agarwal <sid0@fb.com>
parents:
695
diff
changeset
|
199 if hgutil.safehasattr(lrepo, 'changelog') and co not in lrepo.changelog: |
297
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
200 co = None |
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
201 return revs, co |
300
eec31dee258e
Various hg 1.4 compat fixes.
Augie Fackler <durin42@gmail.com>
parents:
298
diff
changeset
|
202 if getattr(hg, 'addbranchrevs', False): |
eec31dee258e
Various hg 1.4 compat fixes.
Augie Fackler <durin42@gmail.com>
parents:
298
diff
changeset
|
203 extensions.wrapfunction(hg, 'addbranchrevs', safebranchrevs) |
297
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
204 |
695
2c67099875cd
extsetup: use new-style extsetup with ui parameter
Siddharth Agarwal <sid0@fb.com>
parents:
693
diff
changeset
|
205 def extsetup(ui): |
482
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
206 templatekw.keywords.update({'gitnode': gitnodekw}) |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
207 revset.symbols.update({ |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
208 'fromgit': revset_fromgit, 'gitnode': revset_gitnode |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
209 }) |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
210 helpdir = os.path.join(os.path.dirname(__file__), 'help') |
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
211 entry = (['git'], _("Working with Git Repositories"), |
928
983126c08bad
help: ignore argument passed to doc loader
Yuya Nishihara <yuya@tcha.org>
parents:
926
diff
changeset
|
212 # Mercurial >= 3.6: doc(ui) |
983126c08bad
help: ignore argument passed to doc loader
Yuya Nishihara <yuya@tcha.org>
parents:
926
diff
changeset
|
213 lambda *args: open(os.path.join(helpdir, 'git.rst')).read()) |
675
4cb3515cefb0
extsetup: drop support for Mercurial < 1.7
Siddharth Agarwal <sid0@fb.com>
parents:
674
diff
changeset
|
214 insort(help.helptable, entry) |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
215 |
206
5986ac6a591e
create the repository subclass in reposetup
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
182
diff
changeset
|
216 def reposetup(ui, repo): |
296
32456f9cb7a4
hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents:
281
diff
changeset
|
217 if not isinstance(repo, gitrepo.gitrepo): |
953
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
218 |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
219 if (getattr(dirstate, 'rootcache', False) and |
994
9c15c89088fd
gitdirstate: only wrap for hg-git repos
Sean Farley <sean@farley.io>
parents:
993
diff
changeset
|
220 (not ignoremod or getattr(ignore, 'readpats', False)) and |
1018
715cbf3fa24c
vfs: stop using repo.join/wjoin
Durham Goode <durham@fb.com>
parents:
1015
diff
changeset
|
221 hgutil.safehasattr(repo, 'vfs') and |
1088
c06d4656b77b
shared: fix compatibility with hg < 4.2
Kevin Bullock <kbullock@ringworld.org>
parents:
1085
diff
changeset
|
222 os.path.exists(compat.gitvfs(repo).join('git'))): |
953
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
223 # only install our dirstate wrapper if it has a hope of working |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
224 import gitdirstate |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
225 if ignoremod: |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
226 def ignorewrap(orig, *args, **kwargs): |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
227 return gitdirstate.gignore(*args, **kwargs) |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
228 extensions.wrapfunction(ignore, 'ignore', ignorewrap) |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
229 dirstate.dirstate = gitdirstate.gitdirstate |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
230 |
296
32456f9cb7a4
hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents:
281
diff
changeset
|
231 klass = hgrepo.generate_repo_subclass(repo.__class__) |
32456f9cb7a4
hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents:
281
diff
changeset
|
232 repo.__class__ = klass |
60
05a96f7750ad
add support for `hg clone git://github.com/defunkt/facebox.git`
Chris Wanstrath <chris@ozmm.org>
parents:
59
diff
changeset
|
233 |
899
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
234 if hgutil.safehasattr(manifest, '_lazymanifest'): |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
235 # Mercurial >= 3.4 |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
236 extensions.wrapfunction(manifest.manifestdict, 'diff', |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
237 overlay.wrapmanifestdictdiff) |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
238 |
733
5e53342c846b
gimport: drop empty options and redundant synopsis, and add help text
Siddharth Agarwal <sid0@fb.com>
parents:
732
diff
changeset
|
239 @command('gimport') |
137
5aefcbf1e50c
add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents:
136
diff
changeset
|
240 def gimport(ui, repo, remote_name=None): |
733
5e53342c846b
gimport: drop empty options and redundant synopsis, and add help text
Siddharth Agarwal <sid0@fb.com>
parents:
732
diff
changeset
|
241 '''import commits from Git to Mercurial''' |
663
ad0d90fa7a4f
gimport: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
624
diff
changeset
|
242 repo.githandler.import_commits(remote_name) |
137
5aefcbf1e50c
add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents:
136
diff
changeset
|
243 |
734
351213785c4a
gexport: drop empty options and redundant synopsis, and add help text
Siddharth Agarwal <sid0@fb.com>
parents:
733
diff
changeset
|
244 @command('gexport') |
97 | 245 def gexport(ui, repo): |
734
351213785c4a
gexport: drop empty options and redundant synopsis, and add help text
Siddharth Agarwal <sid0@fb.com>
parents:
733
diff
changeset
|
246 '''export commits from Mercurial to Git''' |
664
570c3702b916
gexport: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
663
diff
changeset
|
247 repo.githandler.export_commits() |
97 | 248 |
735
b48be97bd6fd
gclear: drop empty options and move help text to docstring
Siddharth Agarwal <sid0@fb.com>
parents:
734
diff
changeset
|
249 @command('gclear') |
40
f5b000ec7100
added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents:
39
diff
changeset
|
250 def gclear(ui, repo): |
1082
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
251 '''clear out the Git cached data |
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
252 |
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
253 Strips all Git-related metadata from the repo, including the mapping |
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
254 between Git and Mercurial changesets. This is an irreversible |
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
255 destructive operation that may prevent further interaction with |
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
256 other clones. |
b6cdf7be4059
doc: explain gclear more clearly (and warningly)
Kevin Bullock <kbullock@ringworld.org>
parents:
1075
diff
changeset
|
257 ''' |
40
f5b000ec7100
added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents:
39
diff
changeset
|
258 repo.ui.status(_("clearing out the git cache data\n")) |
665
2659f63f0beb
gclear: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
664
diff
changeset
|
259 repo.githandler.clear() |
622
6faa5b0f8909
gitignore: gate feature on dirstate having rootcache and ignore having readpats
Augie Fackler <raf@durin42.com>
parents:
615
diff
changeset
|
260 |
732
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
261 @command('gverify', |
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
262 [('r', 'rev', '', _('revision to verify'), _('REV'))], |
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
263 _('[-r REV]')) |
731
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
264 def gverify(ui, repo, **opts): |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
265 '''verify that a Mercurial rev matches the corresponding Git rev |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
266 |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
267 Given a Mercurial revision that has a corresponding Git revision in the map, |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
268 this attempts to answer whether that revision has the same contents as the |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
269 corresponding Git revision. |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
270 |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
271 ''' |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
272 ctx = scmutil.revsingle(repo, opts.get('rev'), '.') |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
273 return verify.verify(ui, repo, ctx) |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
274 |
736
5d35a5c12b02
git-cleanup: drop empty options and move help text to docstring
Siddharth Agarwal <sid0@fb.com>
parents:
735
diff
changeset
|
275 @command('git-cleanup') |
298
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
276 def git_cleanup(ui, repo): |
736
5d35a5c12b02
git-cleanup: drop empty options and move help text to docstring
Siddharth Agarwal <sid0@fb.com>
parents:
735
diff
changeset
|
277 '''clean up Git commit map after history editing''' |
298
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
278 new_map = [] |
1088
c06d4656b77b
shared: fix compatibility with hg < 4.2
Kevin Bullock <kbullock@ringworld.org>
parents:
1085
diff
changeset
|
279 vfs = compat.gitvfs(repo) |
1085
1003994dd497
share: host the git repository alongside the store
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
1082
diff
changeset
|
280 for line in vfs(GitHandler.map_file): |
298
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
281 gitsha, hgsha = line.strip().split(' ', 1) |
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
282 if hgsha in repo: |
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
283 new_map.append('%s %s\n' % (gitsha, hgsha)) |
1025
e7a8a5710257
wlock: use non-context-manager form to restore older hg support
Kevin Bullock <kbullock@ringworld.org>
parents:
1023
diff
changeset
|
284 wlock = repo.wlock() |
e7a8a5710257
wlock: use non-context-manager form to restore older hg support
Kevin Bullock <kbullock@ringworld.org>
parents:
1023
diff
changeset
|
285 try: |
1085
1003994dd497
share: host the git repository alongside the store
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
1082
diff
changeset
|
286 f = vfs(GitHandler.map_file, 'wb') |
1023
78959c8e5e60
wlock: take wlock when writing map file
Durham Goode <durham@fb.com>
parents:
1020
diff
changeset
|
287 map(f.write, new_map) |
1025
e7a8a5710257
wlock: use non-context-manager form to restore older hg support
Kevin Bullock <kbullock@ringworld.org>
parents:
1023
diff
changeset
|
288 finally: |
e7a8a5710257
wlock: use non-context-manager form to restore older hg support
Kevin Bullock <kbullock@ringworld.org>
parents:
1023
diff
changeset
|
289 wlock.release() |
298
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
290 ui.status(_('git commit map cleaned\n')) |
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
291 |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
292 def findcommonoutgoing(orig, repo, other, *args, **kwargs): |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
293 if isinstance(other, gitrepo.gitrepo): |
666
27fefb7e7cec
findcommonoutgoing: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
665
diff
changeset
|
294 heads = repo.githandler.get_refs(other.path)[0] |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
295 kw = {} |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
296 kw.update(kwargs) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
297 for val, k in zip(args, |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
298 ('onlyheads', 'force', 'commoninc', 'portable')): |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
299 kw[k] = val |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
300 force = kw.get('force', False) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
301 commoninc = kw.get('commoninc', None) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
302 if commoninc is None: |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
303 commoninc = discovery.findcommonincoming(repo, other, heads=heads, |
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
304 force=force) |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
305 kw['commoninc'] = commoninc |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
306 return orig(repo, other, **kw) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
307 return orig(repo, other, *args, **kwargs) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
308 extensions.wrapfunction(discovery, 'findcommonoutgoing', findcommonoutgoing) |
344
af48a5961432
Add just enough code to handle changes to cset discovery.
Augie Fackler <durin42@gmail.com>
parents:
334
diff
changeset
|
309 |
412 | 310 def getremotechanges(orig, ui, repo, other, *args, **opts): |
408 | 311 if isinstance(other, gitrepo.gitrepo): |
424
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
312 if args: |
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
313 revs = args[0] |
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
314 else: |
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
315 revs = opts.get('onlyheads', opts.get('revs')) |
667
b5ef3f0e0efe
getremotechanges: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
666
diff
changeset
|
316 r, c, cleanup = repo.githandler.getremotechanges(other, revs) |
408 | 317 # ugh. This is ugly even by mercurial API compatibility standards |
318 if 'onlyheads' not in orig.func_code.co_varnames: | |
319 cleanup = None | |
320 return r, c, cleanup | |
412 | 321 return orig(ui, repo, other, *args, **opts) |
677
73cf8d292dcb
getremotechanges: drop support for Mercurial < 1.7
Siddharth Agarwal <sid0@fb.com>
parents:
676
diff
changeset
|
322 extensions.wrapfunction(bundlerepo, 'getremotechanges', getremotechanges) |
408 | 323 |
556
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
324 def peer(orig, uiorrepo, *args, **opts): |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
325 newpeer = orig(uiorrepo, *args, **opts) |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
326 if isinstance(newpeer, gitrepo.gitrepo): |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
327 if isinstance(uiorrepo, localrepo.localrepository): |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
328 newpeer.localrepo = uiorrepo |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
329 return newpeer |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
330 extensions.wrapfunction(hg, 'peer', peer) |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
331 |
936
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
332 def isvalidlocalpath(orig, self, path): |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
333 return orig(self, path) or _isgitdir(path) |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
334 if (hgutil.safehasattr(hgui, 'path') and |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
335 hgutil.safehasattr(hgui.path, '_isvalidlocalpath')): |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
336 extensions.wrapfunction(hgui.path, '_isvalidlocalpath', isvalidlocalpath) |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
337 |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
338 @util.transform_notgit |
913
b1b03873c9ad
hggit: adapt pull wrapper function for recent hg
Augie Fackler <augie@google.com>
parents:
912
diff
changeset
|
339 def exchangepull(orig, repo, remote, heads=None, force=False, bookmarks=(), |
b1b03873c9ad
hggit: adapt pull wrapper function for recent hg
Augie Fackler <augie@google.com>
parents:
912
diff
changeset
|
340 **kwargs): |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
341 if isinstance(remote, gitrepo.gitrepo): |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
342 # transaction manager is present in Mercurial >= 3.3 |
847
05eb0874fa30
init: add a try/except to retain compatibility with Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
841
diff
changeset
|
343 try: |
05eb0874fa30
init: add a try/except to retain compatibility with Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
841
diff
changeset
|
344 trmanager = getattr(exchange, 'transactionmanager') |
05eb0874fa30
init: add a try/except to retain compatibility with Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
841
diff
changeset
|
345 except AttributeError: |
05eb0874fa30
init: add a try/except to retain compatibility with Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
841
diff
changeset
|
346 trmanager = None |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
347 pullop = exchange.pulloperation(repo, remote, heads, force, |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
348 bookmarks=bookmarks) |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
349 if trmanager: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
350 pullop.trmanager = trmanager(repo, 'pull', remote.url()) |
897
8026c094173a
pull: acquire wlock before lock to fix lock-checker warnings
Augie Fackler <raf@durin42.com>
parents:
887
diff
changeset
|
351 wlock = repo.wlock() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
352 lock = repo.lock() |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
353 try: |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
354 pullop.cgresult = repo.githandler.fetch(remote.path, heads) |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
355 if trmanager: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
356 pullop.trmanager.close() |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
357 else: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
358 pullop.closetransaction() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
359 return pullop |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
360 finally: |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
361 if trmanager: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
362 pullop.trmanager.release() |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
363 else: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
364 pullop.releasetransaction() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
365 lock.release() |
897
8026c094173a
pull: acquire wlock before lock to fix lock-checker warnings
Augie Fackler <raf@durin42.com>
parents:
887
diff
changeset
|
366 wlock.release() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
367 else: |
913
b1b03873c9ad
hggit: adapt pull wrapper function for recent hg
Augie Fackler <augie@google.com>
parents:
912
diff
changeset
|
368 return orig(repo, remote, heads, force, bookmarks=bookmarks, **kwargs) |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
369 if not hgutil.safehasattr(localrepo.localrepository, 'pull'): |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
370 # Mercurial >= 3.2 |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
371 extensions.wrapfunction(exchange, 'pull', exchangepull) |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
372 |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
373 # TODO figure out something useful to do with the newbranch param |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
374 @util.transform_notgit |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
375 def exchangepush(orig, repo, remote, force=False, revs=None, newbranch=False, |
943
e1d343fdeba4
push: fix exchangepush for Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
942
diff
changeset
|
376 bookmarks=(), **kwargs): |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
377 if isinstance(remote, gitrepo.gitrepo): |
943
e1d343fdeba4
push: fix exchangepush for Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
942
diff
changeset
|
378 # opargs is in Mercurial >= 3.6 |
e1d343fdeba4
push: fix exchangepush for Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
942
diff
changeset
|
379 opargs = kwargs.get('opargs') |
942
d278f6d82a06
push: fix exchangepush wrapping
Durham Goode <durham@fb.com>
parents:
939
diff
changeset
|
380 if opargs is None: |
d278f6d82a06
push: fix exchangepush wrapping
Durham Goode <durham@fb.com>
parents:
939
diff
changeset
|
381 opargs = {} |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
382 pushop = exchange.pushoperation(repo, remote, force, revs, newbranch, |
942
d278f6d82a06
push: fix exchangepush wrapping
Durham Goode <durham@fb.com>
parents:
939
diff
changeset
|
383 bookmarks, **opargs) |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
384 pushop.cgresult = repo.githandler.push(remote.path, revs, force) |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
385 return pushop |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
386 else: |
939
c85c28fbc8a5
hggit: adapt push wrapper function for recent hg
Sean Farley <sean@farley.io>
parents:
938
diff
changeset
|
387 return orig(repo, remote, force, revs, newbranch, bookmarks=bookmarks, |
943
e1d343fdeba4
push: fix exchangepush for Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
942
diff
changeset
|
388 **kwargs) |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
389 if not hgutil.safehasattr(localrepo.localrepository, 'push'): |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
390 # Mercurial >= 3.2 |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
391 extensions.wrapfunction(exchange, 'push', exchangepush) |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
392 |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
393 def revset_fromgit(repo, subset, x): |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
394 '''``fromgit()`` |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
395 Select changesets that originate from Git. |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
396 ''' |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
397 revset.getargs(x, 0, 0, "fromgit takes no arguments") |
668
98e118410521
revset_fromgit: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
667
diff
changeset
|
398 git = repo.githandler |
714
5770a5a8bc00
revset_fromgit: use repo.changelog.node instead of contexts
Siddharth Agarwal <sid0@fb.com>
parents:
713
diff
changeset
|
399 node = repo.changelog.node |
937
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
400 return baseset(r for r in subset |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
401 if git.map_git_get(hex(node(r))) is not None) |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
402 |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
403 def revset_gitnode(repo, subset, x): |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
404 '''``gitnode(hash)`` |
999
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
405 Select the changeset that originates in the given Git revision. The hash |
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
406 may be abbreviated: `gitnode(a5b)` selects the revision whose Git hash |
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
407 starts with `a5b`. Aborts if multiple changesets match the abbreviation. |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
408 ''' |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
409 args = revset.getargs(x, 1, 1, "gitnode takes one argument") |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
410 rev = revset.getstring(args[0], |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
411 "the argument to gitnode() must be a hash") |
669
b8fff2f4e963
revset_gitnode: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
668
diff
changeset
|
412 git = repo.githandler |
713
96f0463a4e54
revset_gitnode: use repo.changelog.node instead of contexts
Siddharth Agarwal <sid0@fb.com>
parents:
706
diff
changeset
|
413 node = repo.changelog.node |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
414 |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
415 def matches(r): |
713
96f0463a4e54
revset_gitnode: use repo.changelog.node instead of contexts
Siddharth Agarwal <sid0@fb.com>
parents:
706
diff
changeset
|
416 gitnode = git.map_git_get(hex(node(r))) |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
417 if gitnode is None: |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
418 return False |
999
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
419 return gitnode.startswith(rev) |
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
420 result = baseset(r for r in subset if matches(r)) |
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
421 if 0 <= len(result) < 2: |
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
422 return result |
a128b9a53b5a
revset_gitnode: allow abbreviated hashes
Sietse Brouwer <sbbrouwer@gmail.com>
parents:
994
diff
changeset
|
423 raise LookupError(rev, git.map_file, _('ambiguous identifier')) |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
424 |
482
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
425 def gitnodekw(**args): |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
426 """:gitnode: String. The Git changeset identification hash, as a 40 hexadecimal digit string.""" |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
427 node = args['ctx'] |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
428 repo = args['repo'] |
670
ab3c64db47d8
gitnodekw: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
669
diff
changeset
|
429 gitnode = repo.githandler.map_git_get(node.hex()) |
482
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
430 if gitnode is None: |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
431 gitnode = '' |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
432 return gitnode |