13 # following option: "--config convert.hg.saverev=false" |
13 # following option: "--config convert.hg.saverev=false" |
14 |
14 |
15 |
15 |
16 import os, time |
16 import os, time |
17 from mercurial.i18n import _ |
17 from mercurial.i18n import _ |
|
18 from mercurial.repo import RepoError |
18 from mercurial.node import bin, hex, nullid |
19 from mercurial.node import bin, hex, nullid |
19 from mercurial import hg, revlog, util |
20 from mercurial import hg, revlog, util |
20 |
21 |
21 from common import NoRepo, commit, converter_source, converter_sink |
22 from common import NoRepo, commit, converter_source, converter_sink |
22 |
23 |
30 if os.path.isdir(path) and len(os.listdir(path)) > 0: |
31 if os.path.isdir(path) and len(os.listdir(path)) > 0: |
31 try: |
32 try: |
32 self.repo = hg.repository(self.ui, path) |
33 self.repo = hg.repository(self.ui, path) |
33 if not self.repo.local(): |
34 if not self.repo.local(): |
34 raise NoRepo(_('%s is not a local Mercurial repo') % path) |
35 raise NoRepo(_('%s is not a local Mercurial repo') % path) |
35 except hg.RepoError, err: |
36 except RepoError, err: |
36 ui.print_exc() |
37 ui.print_exc() |
37 raise NoRepo(err.args[0]) |
38 raise NoRepo(err.args[0]) |
38 else: |
39 else: |
39 try: |
40 try: |
40 ui.status(_('initializing destination %s repository\n') % path) |
41 ui.status(_('initializing destination %s repository\n') % path) |
41 self.repo = hg.repository(self.ui, path, create=True) |
42 self.repo = hg.repository(self.ui, path, create=True) |
42 if not self.repo.local(): |
43 if not self.repo.local(): |
43 raise NoRepo(_('%s is not a local Mercurial repo') % path) |
44 raise NoRepo(_('%s is not a local Mercurial repo') % path) |
44 self.created.append(path) |
45 self.created.append(path) |
45 except hg.RepoError, err: |
46 except RepoError, err: |
46 ui.print_exc() |
47 ui.print_exc() |
47 raise NoRepo("could not create hg repo %s as sink" % path) |
48 raise NoRepo("could not create hg repo %s as sink" % path) |
48 self.lock = None |
49 self.lock = None |
49 self.wlock = None |
50 self.wlock = None |
50 self.filemapmode = False |
51 self.filemapmode = False |
153 p2 = parents.pop(0) |
154 p2 = parents.pop(0) |
154 a = self.repo.rawcommit(files, text, commit.author, commit.date, |
155 a = self.repo.rawcommit(files, text, commit.author, commit.date, |
155 bin(p1), bin(p2), extra=extra) |
156 bin(p1), bin(p2), extra=extra) |
156 self.repo.dirstate.clear() |
157 self.repo.dirstate.clear() |
157 text = "(octopus merge fixup)\n" |
158 text = "(octopus merge fixup)\n" |
158 p2 = hg.hex(self.repo.changelog.tip()) |
159 p2 = hex(self.repo.changelog.tip()) |
159 |
160 |
160 if self.filemapmode and nparents == 1: |
161 if self.filemapmode and nparents == 1: |
161 man = self.repo.manifest |
162 man = self.repo.manifest |
162 mnode = self.repo.changelog.read(bin(p2))[0] |
163 mnode = self.repo.changelog.read(bin(p2))[0] |
163 if not man.cmp(m1node, man.revision(mnode)): |
164 if not man.cmp(m1node, man.revision(mnode)): |
192 extra = {} |
193 extra = {} |
193 if self.tagsbranch != 'default': |
194 if self.tagsbranch != 'default': |
194 extra['branch'] = self.tagsbranch |
195 extra['branch'] = self.tagsbranch |
195 try: |
196 try: |
196 tagparent = self.repo.changectx(self.tagsbranch).node() |
197 tagparent = self.repo.changectx(self.tagsbranch).node() |
197 except hg.RepoError, inst: |
198 except RepoError, inst: |
198 tagparent = nullid |
199 tagparent = nullid |
199 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo", |
200 self.repo.rawcommit([".hgtags"], "update tags", "convert-repo", |
200 date, tagparent, nullid, extra=extra) |
201 date, tagparent, nullid, extra=extra) |
201 return hex(self.repo.changelog.tip()) |
202 return hex(self.repo.changelog.tip()) |
202 |
203 |
210 try: |
211 try: |
211 self.repo = hg.repository(self.ui, path) |
212 self.repo = hg.repository(self.ui, path) |
212 # try to provoke an exception if this isn't really a hg |
213 # try to provoke an exception if this isn't really a hg |
213 # repo, but some other bogus compatible-looking url |
214 # repo, but some other bogus compatible-looking url |
214 if not self.repo.local(): |
215 if not self.repo.local(): |
215 raise hg.RepoError() |
216 raise RepoError() |
216 except hg.RepoError: |
217 except RepoError: |
217 ui.print_exc() |
218 ui.print_exc() |
218 raise NoRepo("%s is not a local Mercurial repo" % path) |
219 raise NoRepo("%s is not a local Mercurial repo" % path) |
219 self.lastrev = None |
220 self.lastrev = None |
220 self.lastctx = None |
221 self.lastctx = None |
221 self._changescache = None |
222 self._changescache = None |