Mercurial > hg > hg-git
annotate git_handler.py @ 8:2548735d24ef
will now more or less correctly determine a changelist from a git commit
author | Scott Chacon <schacon@gmail.com> |
---|---|
date | Sat, 25 Apr 2009 16:57:11 -0700 |
parents | 89992b6d2eef |
children | 7e776864b301 |
rev | line source |
---|---|
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
1 import os, errno, sys, time, datetime, pickle, copy |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
2 import dulwich |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
3 from dulwich.repo import Repo |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
4 from dulwich.client import SimpleFetchGraphWalker |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
5 from hgext import bookmarks |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
6 from mercurial.i18n import _ |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
7 from mercurial.node import bin, hex, nullid |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
8 from mercurial import hg, util, context, error |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
9 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
10 class GitHandler(object): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
11 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
12 def __init__(self, dest_repo, ui): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
13 self.repo = dest_repo |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
14 self.ui = ui |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
15 self.load_git() |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
16 self.load_map() |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
17 |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
18 def load_git(self): |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
19 git_dir = os.path.join(self.repo.path, 'git') |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
20 self.git = Repo(git_dir) |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
21 |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
22 def load_map(self): |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
23 self._map = {} |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
24 if os.path.exists(self.repo.join('git-mapfile')): |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
25 for line in self.repo.opener('git-mapfile'): |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
26 gitsha, hgsha = line.strip().split(' ', 1) |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
27 self._map[gitsha] = hgsha |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
28 |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
29 def save_map(self): |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
30 file = self.repo.opener('git-mapfile', 'w+') |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
31 for gitsha, hgsha in self._map.iteritems(): |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
32 file.write("%s %s\n" % (gitsha, hgsha)) |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
33 file.close() |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
34 |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
35 def fetch(self, git_url): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
36 self.ui.status(_("fetching from git url: " + git_url + "\n")) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
37 self.export_git_objects() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
38 self.fetch_pack(git_url) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
39 self.import_git_objects() |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
40 self.save_map() |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
41 |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
42 def fetch_pack(self, git_url): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
43 client, path = self.get_transport_and_path(git_url) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
44 graphwalker = SimpleFetchGraphWalker(self.git.heads().values(), self.git.get_parents) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
45 f, commit = self.git.object_store.add_pack() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
46 try: |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
47 determine_wants = self.git.object_store.determine_wants_all |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
48 refs = client.fetch_pack(path, determine_wants, graphwalker, f.write, sys.stdout.write) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
49 f.close() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
50 commit() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
51 self.git.set_refs(refs) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
52 except: |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
53 f.close() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
54 raise |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
55 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
56 def import_git_objects(self): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
57 self.ui.status(_("importing Git objects into Hg\n")) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
58 # import heads as remote references |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
59 todo = [] |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
60 done = set() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
61 convert_list = [] |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
62 |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
63 # get a list of all the head shas |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
64 for head, sha in self.git.heads().iteritems(): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
65 todo.append(sha) |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
66 |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
67 # traverse the heads getting a list of all the unique commits |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
68 # TODO : stop when we hit a SHA we've already imported |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
69 while todo: |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
70 sha = todo.pop() |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
71 assert isinstance(sha, str) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
72 if sha in done: |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
73 continue |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
74 done.add(sha) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
75 commit = self.git.commit(sha) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
76 convert_list.append(commit) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
77 todo.extend([p for p in commit.parents if p not in done]) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
78 |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
79 # sort the commits by commit date (TODO: change to topo sort) |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
80 convert_list.sort(cmp=lambda x,y: x.commit_time-y.commit_time) |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
81 |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
82 # import each of the commits, oldest first |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
83 for commit in convert_list: |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
84 self.import_git_commit(commit) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
85 |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
86 # TODO : update Hg bookmarks (possibly named heads?) |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
87 print bookmarks.parse(self.repo) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
88 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
89 def import_git_commit(self, commit): |
8
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
90 print "importing: " + commit.id |
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
91 |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
92 # TODO : have to handle merge contexts at some point (two parent files, etc) |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
93 def getfilectx(repo, memctx, f): |
8
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
94 (e, sha, data) = self.git.get_file(commit, f) |
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
95 e = '' # TODO : make this a real mode |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
96 return context.memfilectx(f, data, 'l' in e, 'x' in e, None) |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
97 |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
98 p1 = "0" * 40 |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
99 p2 = "0" * 40 |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
100 # TODO : do something if parent is not mapped yet! |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
101 if len(commit.parents) > 0: |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
102 sha = commit.parents[0] |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
103 p1 = self._map[sha] |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
104 if len(commit.parents) > 1: |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
105 sha = commit.parents[1] |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
106 p2 = self._map[sha] |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
107 if len(commit.parents) > 2: |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
108 # TODO : map extra parents to the extras file |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
109 pass |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
110 |
8
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
111 files = self.git.get_files_changed(commit) |
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
112 |
2548735d24ef
will now more or less correctly determine a changelist from a git commit
Scott Chacon <schacon@gmail.com>
parents:
7
diff
changeset
|
113 print files |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
114 |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
115 # get a list of the changed, added, removed files |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
116 extra = {} |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
117 text = commit.message |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
118 date = datetime.datetime.fromtimestamp(commit.author_time).strftime("%Y-%m-%d %H:%M:%S") |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
119 ctx = context.memctx(self.repo, (p1, p2), text, files, getfilectx, |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
120 commit.author, date, extra) |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
121 a = self.repo.commitctx(ctx) |
7
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
122 |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
123 # get changeset id |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
124 p2 = hex(self.repo.changelog.tip()) |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
125 # save changeset to mapping file |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
126 gitsha = commit.id |
89992b6d2eef
mapping parents properly now
Scott Chacon <schacon@gmail.com>
parents:
6
diff
changeset
|
127 self._map[gitsha] = p2 |
6
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
128 |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
129 def getfilectx(self, source, repo, memctx, f): |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
130 v = files[f] |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
131 data = source.getfile(f, v) |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
132 e = source.getmode(f, v) |
c77197123d95
importing basic, mostly stubbed changesets
Scott Chacon <schacon@gmail.com>
parents:
5
diff
changeset
|
133 return context.memfilectx(f, data, 'l' in e, 'x' in e, copies.get(f)) |
5
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
134 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
135 def export_git_objects(self): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
136 pass |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
137 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
138 def check_bookmarks(self): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
139 if self.ui.config('extensions', 'hgext.bookmarks') is not None: |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
140 print "YOU NEED TO SETUP BOOKMARKS" |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
141 |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
142 def get_transport_and_path(self, uri): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
143 from dulwich.client import TCPGitClient, SSHGitClient, SubprocessGitClient |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
144 for handler, transport in (("git://", TCPGitClient), ("git+ssh://", SSHGitClient)): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
145 if uri.startswith(handler): |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
146 host, path = uri[len(handler):].split("/", 1) |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
147 return transport(host), "/"+path |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
148 # if its not git or git+ssh, try a local url.. |
d6c443a91b18
refactored the git handling stuff out into another class
Scott Chacon <schacon@gmail.com>
parents:
diff
changeset
|
149 return SubprocessGitClient(), uri |