Mercurial > hg-git
annotate hggit/__init__.py @ 994:9c15c89088fd
gitdirstate: only wrap for hg-git repos
Previously, if a user enables hg-git and in a non-git repo (i.e.
hg-only) they have a .gitignore, then hg-git will try to parse that. I
consider this a bug and a bad performance regression for what should be
a no-op.
author | Sean Farley <sean@farley.io> |
---|---|
date | Fri, 02 Sep 2016 18:26:01 -0700 |
parents | 1fec6463922b |
children | a128b9a53b5a |
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 |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
24 import gitrepo |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
25 import hgrepo |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
26 import overlay |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
27 import verify |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
28 import util |
912
5cc9594cc811
Add version info to hggit for "hg --version -v"
anatoly techtonik <techtonik@gmail.com>
parents:
909
diff
changeset
|
29 |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
30 from bisect import insort |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
31 from git_handler import GitHandler |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
32 from mercurial.node import hex |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
33 from mercurial.i18n import _ |
959
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
34 from mercurial import ( |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
35 bundlerepo, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
36 cmdutil, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
37 demandimport, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
38 dirstate, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
39 discovery, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
40 extensions, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
41 help, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
42 hg, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
43 ui as hgui, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
44 util as hgutil, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
45 localrepo, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
46 manifest, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
47 revset, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
48 scmutil, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
49 templatekw, |
db270ed5df13
init: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
953
diff
changeset
|
50 ) |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
51 |
782
e5450a81676e
__init__: work around exchange not yet existing in hg 2.8.x
Augie Fackler <raf@durin42.com>
parents:
781
diff
changeset
|
52 try: |
e5450a81676e
__init__: work around exchange not yet existing in hg 2.8.x
Augie Fackler <raf@durin42.com>
parents:
781
diff
changeset
|
53 from mercurial import exchange |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
54 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
|
55 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
|
56 # 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
|
57 pass |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
58 |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
59 try: |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
60 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
|
61 ignore.readpats |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
62 ignoremod = True |
956
06385a2b30f3
init: handle AttributeError in addition to ImportError
timeless@gmail.com
parents:
953
diff
changeset
|
63 except (AttributeError, ImportError): |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
901
diff
changeset
|
64 # 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
|
65 ignoremod = False |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
66 |
937
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
67 baseset = set |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
68 try: |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
69 baseset = revset.baseset |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
70 except AttributeError: |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
71 # baseset was added in hg 3.0 |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
72 pass |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
73 |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
74 |
362
5b6961384ee2
demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents:
352
diff
changeset
|
75 demandimport.ignore.extend([ |
5b6961384ee2
demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents:
352
diff
changeset
|
76 'collections', |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
77 ]) |
0
06366111af3c
initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
78 |
985
53d514c9c7e6
init: mark Mercurial 3.7 as supported and prepare for 0.8.5
Siddharth Agarwal <sid0@fb.com>
parents:
976
diff
changeset
|
79 __version__ = '0.8.5' |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
80 |
993
1fec6463922b
tests: update list of hg versions we've tested with
Kevin Bullock <kbullock@ringworld.org>
parents:
985
diff
changeset
|
81 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' |
1fec6463922b
tests: update list of hg versions we've tested with
Kevin Bullock <kbullock@ringworld.org>
parents:
985
diff
changeset
|
82 '3.8.4 3.9') |
545 | 83 buglink = 'https://bitbucket.org/durin42/hg-git/issues' |
84 | |
732
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
85 cmdtable = {} |
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
86 command = cmdutil.command(cmdtable) |
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
87 |
60
05a96f7750ad
add support for `hg clone git://github.com/defunkt/facebox.git`
Chris Wanstrath <chris@ozmm.org>
parents:
59
diff
changeset
|
88 # 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
|
89 # 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
|
90 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
|
91 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
|
92 |
256
442fe2ca104d
Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents:
220
diff
changeset
|
93 # 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
|
94 _oldlocal = hg.schemes['file'] |
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
95 |
388
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
96 try: |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 |
bcc79fa3fe09
url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents:
383
diff
changeset
|
103 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
|
104 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
|
105 |
935
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
106 def _isgitdir(path): |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
107 """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
|
108 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
|
109 return False |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
110 |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
111 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
|
112 # is full git repo |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
113 return True |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
114 |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
115 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
|
116 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
|
117 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
|
118 # is bare git repo |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
119 return True |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
120 |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
121 return False |
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
122 |
220
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
123 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
|
124 p = urlcls(path).localpath() |
935
f7d0175264ce
paths: refactor gitdir detection to a function
Durham Goode <durham@fb.com>
parents:
928
diff
changeset
|
125 if _isgitdir(p): |
263
9f5a7a5d52aa
Enable detection of bare repositories as a local git repo
Lincoln Stoll <lstoll@lstoll.net>
parents:
260
diff
changeset
|
126 return gitrepo |
922
ee9017a3c269
init: test for raw git ssh paths
Sean Farley <sean@farley.io>
parents:
919
diff
changeset
|
127 # 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
|
128 if util.isgitsshuri(p): |
ee9017a3c269
init: test for raw git ssh paths
Sean Farley <sean@farley.io>
parents:
919
diff
changeset
|
129 return gitrepo |
256
442fe2ca104d
Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents:
220
diff
changeset
|
130 return _oldlocal(path) |
220
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
131 |
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
132 hg.schemes['file'] = _local |
211fa793d74f
support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
210
diff
changeset
|
133 |
938
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
134 # 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
|
135 # local filesystem path. ugh. |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
136 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
|
137 # 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
|
138 # a git uri |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
139 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
|
140 return orig(path, **kwargs) |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
141 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
142 # 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
|
143 # ':' |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
144 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
|
145 gituri = path[lastsep:] |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
146 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
147 if util.isgitsshuri(gituri): |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
148 return orig(gituri, **kwargs) |
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 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
|
152 |
e1117014036c
init: wrap hgutil.url so that we can use isgitsshuri
Sean Farley <sean@farley.io>
parents:
937
diff
changeset
|
153 |
923
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
154 def _httpgitwrapper(orig): |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
155 # 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
|
156 # 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
|
157 def httpgitscheme(uri): |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
158 if uri.endswith('.git'): |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
159 return gitrepo |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
160 |
924
7c80e9f8131f
init: fix default hg breakage by returning the right type
Sean Farley <sean@farley.io>
parents:
923
diff
changeset
|
161 # 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
|
162 return orig |
923
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
163 |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
164 return httpgitscheme |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
165 |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
166 hg.schemes['https'] = _httpgitwrapper(hg.schemes['https']) |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
167 hg.schemes['http'] = _httpgitwrapper(hg.schemes['http']) |
e28affca64de
init: test for git http(s) paths
Sean Farley <sean@farley.io>
parents:
922
diff
changeset
|
168 |
281
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
169 hgdefaultdest = hg.defaultdest |
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
170 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
|
171 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
|
172 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
|
173 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
|
174 |
6507d2a6be0a
util: add heuristic method to determine if a uri is git
Sean Farley <sean@farley.io>
parents:
918
diff
changeset
|
175 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
|
176 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
|
177 |
281
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
178 return hgdefaultdest(source) |
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
179 hg.defaultdest = defaultdest |
a14529b7b8f2
init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents:
280
diff
changeset
|
180 |
918
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
181 def getversion(): |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
182 """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
|
183 import dulwich |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
184 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
|
185 return __version__ + (" (dulwich %s)" % dulver) |
f5dc1730e4d3
init: sort imports and clean up pep warnings
Sean Farley <sean@farley.io>
parents:
913
diff
changeset
|
186 |
297
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
187 # 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
|
188 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
|
189 revs, co = orig(lrepo, repo, branches, revs) |
706
5e74edb7a62d
safebranchrevs: handle changelog having no commits
Siddharth Agarwal <sid0@fb.com>
parents:
695
diff
changeset
|
190 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
|
191 co = None |
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
192 return revs, co |
300
eec31dee258e
Various hg 1.4 compat fixes.
Augie Fackler <durin42@gmail.com>
parents:
298
diff
changeset
|
193 if getattr(hg, 'addbranchrevs', False): |
eec31dee258e
Various hg 1.4 compat fixes.
Augie Fackler <durin42@gmail.com>
parents:
298
diff
changeset
|
194 extensions.wrapfunction(hg, 'addbranchrevs', safebranchrevs) |
297
a90fe3e8a8c3
hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents:
296
diff
changeset
|
195 |
695
2c67099875cd
extsetup: use new-style extsetup with ui parameter
Siddharth Agarwal <sid0@fb.com>
parents:
693
diff
changeset
|
196 def extsetup(ui): |
482
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
197 templatekw.keywords.update({'gitnode': gitnodekw}) |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
198 revset.symbols.update({ |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
199 'fromgit': revset_fromgit, 'gitnode': revset_gitnode |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
200 }) |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
201 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
|
202 entry = (['git'], _("Working with Git Repositories"), |
928
983126c08bad
help: ignore argument passed to doc loader
Yuya Nishihara <yuya@tcha.org>
parents:
926
diff
changeset
|
203 # Mercurial >= 3.6: doc(ui) |
983126c08bad
help: ignore argument passed to doc loader
Yuya Nishihara <yuya@tcha.org>
parents:
926
diff
changeset
|
204 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
|
205 insort(help.helptable, entry) |
481
9df1741f3977
help: add additional help topics
David M. Carr <david@carrclan.us>
parents:
442
diff
changeset
|
206 |
206
5986ac6a591e
create the repository subclass in reposetup
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
182
diff
changeset
|
207 def reposetup(ui, repo): |
296
32456f9cb7a4
hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents:
281
diff
changeset
|
208 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
|
209 |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
210 if (getattr(dirstate, 'rootcache', False) and |
994
9c15c89088fd
gitdirstate: only wrap for hg-git repos
Sean Farley <sean@farley.io>
parents:
993
diff
changeset
|
211 (not ignoremod or getattr(ignore, 'readpats', False)) and |
9c15c89088fd
gitdirstate: only wrap for hg-git repos
Sean Farley <sean@farley.io>
parents:
993
diff
changeset
|
212 hgutil.safehasattr(repo, 'join') and |
9c15c89088fd
gitdirstate: only wrap for hg-git repos
Sean Farley <sean@farley.io>
parents:
993
diff
changeset
|
213 os.path.exists(repo.join('git'))): |
953
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
214 # 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
|
215 import gitdirstate |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
216 if ignoremod: |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
217 def ignorewrap(orig, *args, **kwargs): |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
218 return gitdirstate.gignore(*args, **kwargs) |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
219 extensions.wrapfunction(ignore, 'ignore', ignorewrap) |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
220 dirstate.dirstate = gitdirstate.gitdirstate |
393bde462133
init: only activate git ignore logic in reposetup
Sean Farley <sean@farley.io>
parents:
946
diff
changeset
|
221 |
296
32456f9cb7a4
hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents:
281
diff
changeset
|
222 klass = hgrepo.generate_repo_subclass(repo.__class__) |
32456f9cb7a4
hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents:
281
diff
changeset
|
223 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
|
224 |
899
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
225 if hgutil.safehasattr(manifest, '_lazymanifest'): |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
226 # Mercurial >= 3.4 |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
227 extensions.wrapfunction(manifest.manifestdict, 'diff', |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
228 overlay.wrapmanifestdictdiff) |
11ca21820a95
overlay: adapt diff to work with lazymanifests
Siddharth Agarwal <sid0@fb.com>
parents:
897
diff
changeset
|
229 |
733
5e53342c846b
gimport: drop empty options and redundant synopsis, and add help text
Siddharth Agarwal <sid0@fb.com>
parents:
732
diff
changeset
|
230 @command('gimport') |
137
5aefcbf1e50c
add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents:
136
diff
changeset
|
231 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
|
232 '''import commits from Git to Mercurial''' |
663
ad0d90fa7a4f
gimport: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
624
diff
changeset
|
233 repo.githandler.import_commits(remote_name) |
137
5aefcbf1e50c
add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents:
136
diff
changeset
|
234 |
734
351213785c4a
gexport: drop empty options and redundant synopsis, and add help text
Siddharth Agarwal <sid0@fb.com>
parents:
733
diff
changeset
|
235 @command('gexport') |
97 | 236 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
|
237 '''export commits from Mercurial to Git''' |
664
570c3702b916
gexport: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
663
diff
changeset
|
238 repo.githandler.export_commits() |
97 | 239 |
735
b48be97bd6fd
gclear: drop empty options and move help text to docstring
Siddharth Agarwal <sid0@fb.com>
parents:
734
diff
changeset
|
240 @command('gclear') |
40
f5b000ec7100
added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents:
39
diff
changeset
|
241 def gclear(ui, repo): |
735
b48be97bd6fd
gclear: drop empty options and move help text to docstring
Siddharth Agarwal <sid0@fb.com>
parents:
734
diff
changeset
|
242 '''clear out the Git cached data''' |
40
f5b000ec7100
added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents:
39
diff
changeset
|
243 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
|
244 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
|
245 |
732
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
246 @command('gverify', |
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
247 [('r', 'rev', '', _('revision to verify'), _('REV'))], |
a67fecf02adb
commands: switch to new-style declaration via decorators
Siddharth Agarwal <sid0@fb.com>
parents:
731
diff
changeset
|
248 _('[-r REV]')) |
731
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
249 def gverify(ui, repo, **opts): |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
250 '''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
|
251 |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
252 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
|
253 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
|
254 corresponding Git revision. |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
255 |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
256 ''' |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
257 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
|
258 return verify.verify(ui, repo, ctx) |
705f0a2a7c18
verify: add a wrapper function in __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
730
diff
changeset
|
259 |
736
5d35a5c12b02
git-cleanup: drop empty options and move help text to docstring
Siddharth Agarwal <sid0@fb.com>
parents:
735
diff
changeset
|
260 @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
|
261 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
|
262 '''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
|
263 new_map = [] |
768
4a9057b16f40
git_handler: rename mapfile to map_file for PEP8 compat
Siddharth Agarwal <sid0@fb.com>
parents:
754
diff
changeset
|
264 for line in repo.opener(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
|
265 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
|
266 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
|
267 new_map.append('%s %s\n' % (gitsha, hgsha)) |
768
4a9057b16f40
git_handler: rename mapfile to map_file for PEP8 compat
Siddharth Agarwal <sid0@fb.com>
parents:
754
diff
changeset
|
268 f = repo.opener(GitHandler.map_file, 'wb') |
298
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
269 map(f.write, new_map) |
6ad6945b6629
pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents:
297
diff
changeset
|
270 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
|
271 |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
272 def findcommonoutgoing(orig, repo, other, *args, **kwargs): |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
273 if isinstance(other, gitrepo.gitrepo): |
666
27fefb7e7cec
findcommonoutgoing: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
665
diff
changeset
|
274 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
|
275 kw = {} |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
276 kw.update(kwargs) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
277 for val, k in zip(args, |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
278 ('onlyheads', 'force', 'commoninc', 'portable')): |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
279 kw[k] = val |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
280 force = kw.get('force', False) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
281 commoninc = kw.get('commoninc', None) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
282 if commoninc is None: |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
283 commoninc = discovery.findcommonincoming(repo, other, heads=heads, |
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
284 force=force) |
523
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
285 kw['commoninc'] = commoninc |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
286 return orig(repo, other, **kw) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
287 return orig(repo, other, *args, **kwargs) |
8c1f2b07c04b
outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents:
483
diff
changeset
|
288 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
|
289 |
412 | 290 def getremotechanges(orig, ui, repo, other, *args, **opts): |
408 | 291 if isinstance(other, gitrepo.gitrepo): |
424
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
292 if args: |
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
293 revs = args[0] |
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
294 else: |
d2c4333e5f14
getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents:
412
diff
changeset
|
295 revs = opts.get('onlyheads', opts.get('revs')) |
667
b5ef3f0e0efe
getremotechanges: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
666
diff
changeset
|
296 r, c, cleanup = repo.githandler.getremotechanges(other, revs) |
408 | 297 # ugh. This is ugly even by mercurial API compatibility standards |
298 if 'onlyheads' not in orig.func_code.co_varnames: | |
299 cleanup = None | |
300 return r, c, cleanup | |
412 | 301 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
|
302 extensions.wrapfunction(bundlerepo, 'getremotechanges', getremotechanges) |
408 | 303 |
556
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
304 def peer(orig, uiorrepo, *args, **opts): |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
305 newpeer = orig(uiorrepo, *args, **opts) |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
306 if isinstance(newpeer, gitrepo.gitrepo): |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
307 if isinstance(uiorrepo, localrepo.localrepository): |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
308 newpeer.localrepo = uiorrepo |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
309 return newpeer |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
310 extensions.wrapfunction(hg, 'peer', peer) |
affd119533ae
peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents:
546
diff
changeset
|
311 |
936
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
312 def isvalidlocalpath(orig, self, path): |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
313 return orig(self, path) or _isgitdir(path) |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
314 if (hgutil.safehasattr(hgui, 'path') and |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
315 hgutil.safehasattr(hgui.path, '_isvalidlocalpath')): |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
316 extensions.wrapfunction(hgui.path, '_isvalidlocalpath', isvalidlocalpath) |
f05962b0e78a
paths: mark git repos as valid paths
Durham Goode <durham@fb.com>
parents:
935
diff
changeset
|
317 |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
318 @util.transform_notgit |
913
b1b03873c9ad
hggit: adapt pull wrapper function for recent hg
Augie Fackler <augie@google.com>
parents:
912
diff
changeset
|
319 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
|
320 **kwargs): |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
321 if isinstance(remote, gitrepo.gitrepo): |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
322 # 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
|
323 try: |
05eb0874fa30
init: add a try/except to retain compatibility with Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
841
diff
changeset
|
324 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
|
325 except AttributeError: |
05eb0874fa30
init: add a try/except to retain compatibility with Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
841
diff
changeset
|
326 trmanager = None |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
327 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
|
328 bookmarks=bookmarks) |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
329 if trmanager: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
330 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
|
331 wlock = repo.wlock() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
332 lock = repo.lock() |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
333 try: |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
334 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
|
335 if trmanager: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
336 pullop.trmanager.close() |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
337 else: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
338 pullop.closetransaction() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
339 return pullop |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
340 finally: |
841
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
341 if trmanager: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
342 pullop.trmanager.release() |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
343 else: |
ef904bd8d3fb
exchangepull: fixup for introduction of transaction manager upstream
Siddharth Agarwal <sid0@fb.com>
parents:
782
diff
changeset
|
344 pullop.releasetransaction() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
345 lock.release() |
897
8026c094173a
pull: acquire wlock before lock to fix lock-checker warnings
Augie Fackler <raf@durin42.com>
parents:
887
diff
changeset
|
346 wlock.release() |
780
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
347 else: |
913
b1b03873c9ad
hggit: adapt pull wrapper function for recent hg
Augie Fackler <augie@google.com>
parents:
912
diff
changeset
|
348 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
|
349 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
|
350 # Mercurial >= 3.2 |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
351 extensions.wrapfunction(exchange, 'pull', exchangepull) |
db10082cf043
exchange: wrap pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
768
diff
changeset
|
352 |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
353 # 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
|
354 @util.transform_notgit |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
355 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
|
356 bookmarks=(), **kwargs): |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
357 if isinstance(remote, gitrepo.gitrepo): |
943
e1d343fdeba4
push: fix exchangepush for Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
942
diff
changeset
|
358 # opargs is in Mercurial >= 3.6 |
e1d343fdeba4
push: fix exchangepush for Mercurial 3.2
Siddharth Agarwal <sid0@fb.com>
parents:
942
diff
changeset
|
359 opargs = kwargs.get('opargs') |
942
d278f6d82a06
push: fix exchangepush wrapping
Durham Goode <durham@fb.com>
parents:
939
diff
changeset
|
360 if opargs is None: |
d278f6d82a06
push: fix exchangepush wrapping
Durham Goode <durham@fb.com>
parents:
939
diff
changeset
|
361 opargs = {} |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
362 pushop = exchange.pushoperation(repo, remote, force, revs, newbranch, |
942
d278f6d82a06
push: fix exchangepush wrapping
Durham Goode <durham@fb.com>
parents:
939
diff
changeset
|
363 bookmarks, **opargs) |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
364 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
|
365 return pushop |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
366 else: |
939
c85c28fbc8a5
hggit: adapt push wrapper function for recent hg
Sean Farley <sean@farley.io>
parents:
938
diff
changeset
|
367 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
|
368 **kwargs) |
781
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
369 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
|
370 # Mercurial >= 3.2 |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
371 extensions.wrapfunction(exchange, 'push', exchangepush) |
8bfb1d72b49c
exchange: wrap push if localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
780
diff
changeset
|
372 |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
373 def revset_fromgit(repo, subset, x): |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
374 '''``fromgit()`` |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
375 Select changesets that originate from Git. |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
376 ''' |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
377 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
|
378 git = repo.githandler |
714
5770a5a8bc00
revset_fromgit: use repo.changelog.node instead of contexts
Siddharth Agarwal <sid0@fb.com>
parents:
713
diff
changeset
|
379 node = repo.changelog.node |
937
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
380 return baseset(r for r in subset |
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
381 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
|
382 |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
383 def revset_gitnode(repo, subset, x): |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
384 '''``gitnode(hash)`` |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
385 Select changesets that originate in the given Git revision. |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
386 ''' |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
387 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
|
388 rev = revset.getstring(args[0], |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
389 "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
|
390 git = repo.githandler |
713
96f0463a4e54
revset_gitnode: use repo.changelog.node instead of contexts
Siddharth Agarwal <sid0@fb.com>
parents:
706
diff
changeset
|
391 node = repo.changelog.node |
887
8f9d52f7942e
init: whitespace and formating cleanup
Sean Farley <sean@farley.io>
parents:
857
diff
changeset
|
392 |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
393 def matches(r): |
713
96f0463a4e54
revset_gitnode: use repo.changelog.node instead of contexts
Siddharth Agarwal <sid0@fb.com>
parents:
706
diff
changeset
|
394 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
|
395 if gitnode is None: |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
396 return False |
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
397 return rev in [gitnode, gitnode[:12]] |
937
d46938925708
revsets: use baseset instead of raw list
Sean Farley <sean@farley.io>
parents:
936
diff
changeset
|
398 return baseset(r for r in subset if matches(r)) |
483
d2caea269670
revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents:
482
diff
changeset
|
399 |
482
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
400 def gitnodekw(**args): |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
401 """: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
|
402 node = args['ctx'] |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
403 repo = args['repo'] |
670
ab3c64db47d8
gitnodekw: use githandler from repo
Siddharth Agarwal <sid0@fb.com>
parents:
669
diff
changeset
|
404 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
|
405 if gitnode is None: |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
406 gitnode = '' |
00d591868a2f
templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents:
481
diff
changeset
|
407 return gitnode |