annotate hggit/__init__.py @ 556:affd119533ae

peer: pass localrepo to new gitrepo instances This change wraps hg.peer to allow for capturing the repo object. It is then passed in to new gitrepo instanceds. This will be needed to implement later functionality, such as richer bookmark support using pushkeys.
author David M. Carr <david@carrclan.us>
date Thu, 25 Oct 2012 19:54:05 -0400
parents c5d4900a804e
children 503d403fc040
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b9c94c21777e Add some better help.
Augie Fackler <durin42@gmail.com>
parents: 220
diff changeset
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
b9c94c21777e Add some better help.
Augie Fackler <durin42@gmail.com>
parents: 220
diff changeset
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
b9c94c21777e Add some better help.
Augie Fackler <durin42@gmail.com>
parents: 220
diff changeset
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
481
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
20 from bisect import insort
351
dd90394cd13b findoutgoing: update wrapper for hg change 98c874a929f1
Augie Fackler <durin42@gmail.com>
parents: 344
diff changeset
21 import inspect
256
442fe2ca104d Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents: 220
diff changeset
22 import os
442fe2ca104d Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents: 220
diff changeset
23
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
24 from mercurial import bundlerepo
334
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
25 from mercurial import commands
362
5b6961384ee2 demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents: 352
diff changeset
26 from mercurial import demandimport
523
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
27 from mercurial import discovery
334
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
28 from mercurial import extensions
481
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
29 from mercurial import help
334
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
30 from mercurial import hg
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
31 from mercurial import localrepo
483
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
32 from mercurial import revset
482
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
33 from mercurial import templatekw
334
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
34 from mercurial import util as hgutil
383
61865ad88740 compatibility with new url handling in Mercurial 1.9
Mads Kiilerich <mads@kiilerich.com>
parents: 373
diff changeset
35 from mercurial import url
0
06366111af3c initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff changeset
36 from mercurial.i18n import _
220
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
37
362
5b6961384ee2 demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents: 352
diff changeset
38 demandimport.ignore.extend([
5b6961384ee2 demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents: 352
diff changeset
39 'collections',
5b6961384ee2 demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents: 352
diff changeset
40 ])
5b6961384ee2 demandimport: defend against collections breakage in new dulwich
Augie Fackler <durin42@gmail.com>
parents: 352
diff changeset
41
210
9a27c618d0ed remove broken tagging code (see issue 3 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 206
diff changeset
42 import gitrepo, hgrepo
5
d6c443a91b18 refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents: 4
diff changeset
43 from git_handler import GitHandler
0
06366111af3c initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff changeset
44
546
c5d4900a804e docs: include testedwith
David M. Carr <david@carrclan.us>
parents: 545
diff changeset
45 testedwith = '1.9.3 2.0.2 2.1.2 2.2.3 2.3.1'
545
22b8df4c54c5 docs: include buglink
David M. Carr <david@carrclan.us>
parents: 523
diff changeset
46 buglink = 'https://bitbucket.org/durin42/hg-git/issues'
22b8df4c54c5 docs: include buglink
David M. Carr <david@carrclan.us>
parents: 523
diff changeset
47
60
05a96f7750ad add support for `hg clone git://github.com/defunkt/facebox.git`
Chris Wanstrath <chris@ozmm.org>
parents: 59
diff changeset
48 # 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
49 # also hg clone git+ssh://git@github.com/schacon/simplegit.git
439
3f45c88100e8 add support for the HTTP smart protocol when using Dulwich tip
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 430
diff changeset
50 _gitschemes = ('git', 'git+ssh', 'git+http', 'git+https')
3f45c88100e8 add support for the HTTP smart protocol when using Dulwich tip
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 430
diff changeset
51 for _scheme in _gitschemes:
3f45c88100e8 add support for the HTTP smart protocol when using Dulwich tip
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 430
diff changeset
52 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
53
256
442fe2ca104d Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents: 220
diff changeset
54 # 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
55 _oldlocal = hg.schemes['file']
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
56
388
bcc79fa3fe09 url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents: 383
diff changeset
57 try:
bcc79fa3fe09 url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents: 383
diff changeset
58 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
59 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
60 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
61 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
62 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
63
bcc79fa3fe09 url wasn't ever published as url.url, and is now util.url
Augie Fackler <durin42@gmail.com>
parents: 383
diff changeset
64 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
65 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
66
220
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
67 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
68 p = urlcls(path).localpath()
280
d0594f7675e1 init: whitespace cleanup
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
69 if (os.path.exists(os.path.join(p, '.git')) and
256
442fe2ca104d Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents: 220
diff changeset
70 not os.path.exists(os.path.join(p, '.hg'))):
220
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
71 return gitrepo
263
9f5a7a5d52aa Enable detection of bare repositories as a local git repo
Lincoln Stoll <lstoll@lstoll.net>
parents: 260
diff changeset
72 # detect a bare repository
280
d0594f7675e1 init: whitespace cleanup
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
73 if (os.path.exists(os.path.join(p, 'HEAD')) and
d0594f7675e1 init: whitespace cleanup
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
74 os.path.exists(os.path.join(p, 'objects')) and
d0594f7675e1 init: whitespace cleanup
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
75 os.path.exists(os.path.join(p, 'refs')) and
263
9f5a7a5d52aa Enable detection of bare repositories as a local git repo
Lincoln Stoll <lstoll@lstoll.net>
parents: 260
diff changeset
76 not os.path.exists(os.path.join(p, '.hg'))):
9f5a7a5d52aa Enable detection of bare repositories as a local git repo
Lincoln Stoll <lstoll@lstoll.net>
parents: 260
diff changeset
77 return gitrepo
256
442fe2ca104d Simpler handling of detection of git repos
Mads Kiilerich <mads@kiilerich.com>
parents: 220
diff changeset
78 return _oldlocal(path)
220
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
79
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
80 hg.schemes['file'] = _local
211fa793d74f support local git repositories (fixes issue 5 bb)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 210
diff changeset
81
281
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
82 hgdefaultdest = hg.defaultdest
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
83 def defaultdest(source):
439
3f45c88100e8 add support for the HTTP smart protocol when using Dulwich tip
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 430
diff changeset
84 for scheme in _gitschemes:
281
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
85 if source.startswith('%s://' % scheme) and source.endswith('.git'):
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
86 source = source[:-4]
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
87 break
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
88 return hgdefaultdest(source)
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
89 hg.defaultdest = defaultdest
a14529b7b8f2 init: strip .git for default clone destination for git sources
Augie Fackler <durin42@gmail.com>
parents: 280
diff changeset
90
297
a90fe3e8a8c3 hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents: 296
diff changeset
91 # 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
92 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
93 revs, co = orig(lrepo, repo, branches, revs)
a90fe3e8a8c3 hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents: 296
diff changeset
94 if getattr(lrepo, 'changelog', False) and co not in lrepo.changelog:
a90fe3e8a8c3 hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents: 296
diff changeset
95 co = None
a90fe3e8a8c3 hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents: 296
diff changeset
96 return revs, co
300
eec31dee258e Various hg 1.4 compat fixes.
Augie Fackler <durin42@gmail.com>
parents: 298
diff changeset
97 if getattr(hg, 'addbranchrevs', False):
eec31dee258e Various hg 1.4 compat fixes.
Augie Fackler <durin42@gmail.com>
parents: 298
diff changeset
98 extensions.wrapfunction(hg, 'addbranchrevs', safebranchrevs)
297
a90fe3e8a8c3 hggit: defend against exceptions when pulling with -r
Augie Fackler <durin42@gmail.com>
parents: 296
diff changeset
99
481
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
100 def extsetup():
482
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
101 templatekw.keywords.update({'gitnode': gitnodekw})
483
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
102 revset.symbols.update({
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
103 'fromgit': revset_fromgit, 'gitnode': revset_gitnode
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
104 })
481
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
105 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
106 entry = (['git'], _("Working with Git Repositories"),
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
107 lambda: open(os.path.join(helpdir, 'git.rst')).read())
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
108 # in 1.6 and earler the help table is a tuple
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
109 if getattr(help.helptable, 'extend', None):
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
110 insort(help.helptable, entry)
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
111 else:
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
112 help.helptable = help.helptable + (entry,)
9df1741f3977 help: add additional help topics
David M. Carr <david@carrclan.us>
parents: 442
diff changeset
113
206
5986ac6a591e create the repository subclass in reposetup
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 182
diff changeset
114 def reposetup(ui, repo):
296
32456f9cb7a4 hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents: 281
diff changeset
115 if not isinstance(repo, gitrepo.gitrepo):
32456f9cb7a4 hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents: 281
diff changeset
116 klass = hgrepo.generate_repo_subclass(repo.__class__)
32456f9cb7a4 hggit: don't wrap gitrepo with hgrepo
Augie Fackler <durin42@gmail.com>
parents: 281
diff changeset
117 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
118
137
5aefcbf1e50c add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 136
diff changeset
119 def gimport(ui, repo, remote_name=None):
5aefcbf1e50c add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 136
diff changeset
120 git = GitHandler(repo, ui)
5aefcbf1e50c add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 136
diff changeset
121 git.import_commits(remote_name)
5aefcbf1e50c add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 136
diff changeset
122
97
f0628f5270b6 add gexport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 63
diff changeset
123 def gexport(ui, repo):
f0628f5270b6 add gexport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 63
diff changeset
124 git = GitHandler(repo, ui)
136
74385b613bb7 rename export to export_commits for future consitency
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 134
diff changeset
125 git.export_commits()
97
f0628f5270b6 add gexport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 63
diff changeset
126
40
f5b000ec7100 added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents: 39
diff changeset
127 def gclear(ui, repo):
f5b000ec7100 added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents: 39
diff changeset
128 repo.ui.status(_("clearing out the git cache data\n"))
f5b000ec7100 added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents: 39
diff changeset
129 git = GitHandler(repo, ui)
f5b000ec7100 added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents: 39
diff changeset
130 git.clear()
59
19d714ee9941 gfetch should access repo when printing, not dest_repo
Chris Wanstrath <chris@ozmm.org>
parents: 40
diff changeset
131
298
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
132 def git_cleanup(ui, repo):
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
133 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
134 for line in repo.opener(GitHandler.mapfile):
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
135 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
136 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
137 new_map.append('%s %s\n' % (gitsha, hgsha))
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
138 f = repo.opener(GitHandler.mapfile, 'wb')
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
139 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
140 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
141
334
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
142 # drop this when we're 1.6-only, this just backports new behavior
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
143 def sortednodetags(orig, *args, **kwargs):
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
144 ret = orig(*args, **kwargs)
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
145 ret.sort()
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
146 return ret
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
147 extensions.wrapfunction(localrepo.localrepository, 'nodetags', sortednodetags)
eb345bacc1da Cope with tags being sorted (hg cset c7dbd6c4877a) by backporting that behavior
Augie Fackler <durin42@gmail.com>
parents: 320
diff changeset
148
523
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
149 def findcommonoutgoing(orig, repo, other, *args, **kwargs):
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
150 if isinstance(other, gitrepo.gitrepo):
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
151 git = GitHandler(repo, repo.ui)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
152 heads = git.get_refs(other.path)[0]
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
153 kw = {}
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
154 kw.update(kwargs)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
155 for val, k in zip(args,
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
156 ('onlyheads', 'force', 'commoninc', 'portable')):
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
157 kw[k] = val
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
158 force = kw.get('force', False)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
159 commoninc = kw.get('commoninc', None)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
160 if commoninc is None:
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
161 commoninc = discovery.findcommonincoming(repo, other,
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
162 heads=heads, force=force)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
163 kw['commoninc'] = commoninc
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
164 return orig(repo, other, **kw)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
165 return orig(repo, other, *args, **kwargs)
8c1f2b07c04b outgoing: re-introduce support for outgoing
David M. Carr <david@carrclan.us>
parents: 483
diff changeset
166 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
167
412
5932586e6d43 Fix mercurial issue2855
Brendan Cully <brendan@kublai.com>
parents: 408
diff changeset
168 def getremotechanges(orig, ui, repo, other, *args, **opts):
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
169 if isinstance(other, gitrepo.gitrepo):
424
d2c4333e5f14 getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents: 412
diff changeset
170 if args:
d2c4333e5f14 getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents: 412
diff changeset
171 revs = args[0]
d2c4333e5f14 getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents: 412
diff changeset
172 else:
d2c4333e5f14 getremotechanges: fix incoming support
Augie Fackler <durin42@gmail.com>
parents: 412
diff changeset
173 revs = opts.get('onlyheads', opts.get('revs'))
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
174 git = GitHandler(repo, ui)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
175 r, c, cleanup = git.getremotechanges(other, revs)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
176 # ugh. This is ugly even by mercurial API compatibility standards
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
177 if 'onlyheads' not in orig.func_code.co_varnames:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
178 cleanup = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
179 return r, c, cleanup
412
5932586e6d43 Fix mercurial issue2855
Brendan Cully <brendan@kublai.com>
parents: 408
diff changeset
180 return orig(ui, repo, other, *args, **opts)
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
181 try:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
182 extensions.wrapfunction(bundlerepo, 'getremotechanges', getremotechanges)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
183 except AttributeError:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
184 # 1.7+
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
185 pass
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents: 389
diff changeset
186
556
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
187 def peer(orig, uiorrepo, *args, **opts):
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
188 newpeer = orig(uiorrepo, *args, **opts)
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
189 if isinstance(newpeer, gitrepo.gitrepo):
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
190 if isinstance(uiorrepo, localrepo.localrepository):
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
191 newpeer.localrepo = uiorrepo
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
192 return newpeer
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
193 extensions.wrapfunction(hg, 'peer', peer)
affd119533ae peer: pass localrepo to new gitrepo instances
David M. Carr <david@carrclan.us>
parents: 546
diff changeset
194
483
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
195 def revset_fromgit(repo, subset, x):
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
196 '''``fromgit()``
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
197 Select changesets that originate from Git.
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
198 '''
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
199 args = revset.getargs(x, 0, 0, "fromgit takes no arguments")
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
200 git = GitHandler(repo, repo.ui)
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
201 return [r for r in subset if git.map_git_get(repo[r].hex()) is not None]
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
202
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
203 def revset_gitnode(repo, subset, x):
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
204 '''``gitnode(hash)``
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
205 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
206 '''
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
207 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
208 rev = revset.getstring(args[0],
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
209 "the argument to gitnode() must be a hash")
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
210 git = GitHandler(repo, repo.ui)
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
211 def matches(r):
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
212 gitnode = git.map_git_get(repo[r].hex())
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
213 if gitnode is None:
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
214 return False
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
215 return rev in [gitnode, gitnode[:12]]
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
216 return [r for r in subset if matches(r)]
d2caea269670 revsets: add fromgit and gitnode selectors
David M. Carr <david@carrclan.us>
parents: 482
diff changeset
217
482
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
218 def gitnodekw(**args):
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
219 """: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
220 node = args['ctx']
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
221 repo = args['repo']
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
222 git = GitHandler(repo, repo.ui)
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
223 gitnode = git.map_git_get(node.hex())
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
224 if gitnode is None:
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
225 gitnode = ''
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
226 return gitnode
00d591868a2f templatekw: add support for gitnode template keyword
David M. Carr <david@carrclan.us>
parents: 481
diff changeset
227
0
06366111af3c initial import of the hg-git bridging extension for mercurial
Scott Chacon <schacon@gmail.com>
parents:
diff changeset
228 cmdtable = {
137
5aefcbf1e50c add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 136
diff changeset
229 "gimport":
5aefcbf1e50c add a gimport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 136
diff changeset
230 (gimport, [], _('hg gimport')),
97
f0628f5270b6 add gexport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 63
diff changeset
231 "gexport":
f0628f5270b6 add gexport command
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 63
diff changeset
232 (gexport, [], _('hg gexport')),
40
f5b000ec7100 added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents: 39
diff changeset
233 "gclear":
f5b000ec7100 added gclear command to remove all the git data
Scott Chacon <schacon@gmail.com>
parents: 39
diff changeset
234 (gclear, [], _('Clears out the Git cached data')),
298
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
235 "git-cleanup": (git_cleanup, [], _(
6ad6945b6629 pull: make it possible to un-wedge the repo after stripping git revs
Augie Fackler <durin42@gmail.com>
parents: 297
diff changeset
236 "Cleans up git repository after history editing"))
182
9bdd8e76bbab Remove remotes support (use the paths section in hgrc instead)
Abderrahim Kitouni <a.kitouni@gmail.com>
parents: 180
diff changeset
237 }