Mercurial > hgsubversion
comparison fetch_command.py @ 179:a336e3e82648
Fetch: add a filemap argument for use in converting old repositories to
Mercurial.
| author | Graham Booker <gbooker@cod3r.com> |
|---|---|
| date | Sat, 03 Jan 2009 20:15:03 -0600 |
| parents | c4115b3918e9 |
| children | e37f9d3fd5e7 |
comparison
equal
deleted
inserted
replaced
| 178:33ebdcb75bcd | 179:a336e3e82648 |
|---|---|
| 23 | 23 |
| 24 @util.register_subcommand('pull') | 24 @util.register_subcommand('pull') |
| 25 def fetch_revisions(ui, svn_url, hg_repo_path, skipto_rev=0, stupid=None, | 25 def fetch_revisions(ui, svn_url, hg_repo_path, skipto_rev=0, stupid=None, |
| 26 tag_locations='tags', | 26 tag_locations='tags', |
| 27 authors=None, | 27 authors=None, |
| 28 filemap=None, | |
| 28 **opts): | 29 **opts): |
| 29 """Pull new revisions from Subversion. | 30 """Pull new revisions from Subversion. |
| 30 """ | 31 """ |
| 31 svn_url = util.normalize_url(svn_url) | 32 svn_url = util.normalize_url(svn_url) |
| 32 old_encoding = merc_util._encoding | 33 old_encoding = merc_util._encoding |
| 48 hg_editor = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 49 hg_editor = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
| 49 ui_=ui, | 50 ui_=ui, |
| 50 subdir=svn.subdir, | 51 subdir=svn.subdir, |
| 51 author_host=author_host, | 52 author_host=author_host, |
| 52 tag_locations=tag_locations, | 53 tag_locations=tag_locations, |
| 53 authors=authors) | 54 authors=authors, |
| 55 filemap=filemap) | |
| 54 if os.path.exists(hg_editor.uuid_file): | 56 if os.path.exists(hg_editor.uuid_file): |
| 55 uuid = open(hg_editor.uuid_file).read() | 57 uuid = open(hg_editor.uuid_file).read() |
| 56 assert uuid == svn.uuid | 58 assert uuid == svn.uuid |
| 57 start = int(open(hg_editor.last_revision_handled_file, 'r').read()) | 59 start = int(open(hg_editor.last_revision_handled_file, 'r').read()) |
| 58 else: | 60 else: |
| 491 else: | 493 else: |
| 492 branchprefix = branchpath + '/' | 494 branchprefix = branchpath + '/' |
| 493 for path, e in r.paths.iteritems(): | 495 for path, e in r.paths.iteritems(): |
| 494 if not path.startswith(branchprefix): | 496 if not path.startswith(branchprefix): |
| 495 continue | 497 continue |
| 498 if not hg_editor._is_path_valid(branchprefix + path): | |
| 499 continue | |
| 496 kind = svn.checkpath(path, r.revnum) | 500 kind = svn.checkpath(path, r.revnum) |
| 497 path = path[len(branchprefix):] | 501 path = path[len(branchprefix):] |
| 498 if kind == 'f': | 502 if kind == 'f': |
| 499 files.append(path) | 503 files.append(path) |
| 500 elif kind == 'd': | 504 elif kind == 'd': |
| 558 | 562 |
| 559 def filectxfn(repo, memctx, path): | 563 def filectxfn(repo, memctx, path): |
| 560 if path == '.hgsvnexternals': | 564 if path == '.hgsvnexternals': |
| 561 if not externals: | 565 if not externals: |
| 562 raise IOError() | 566 raise IOError() |
| 563 return context.memfilectx(path=path, data=externals.write(), | 567 return context.memfilectx(path=path, data=externals.write(), |
| 564 islink=False, isexec=False, copied=None) | 568 islink=False, isexec=False, copied=None) |
| 565 return filectxfn2(repo, memctx, path) | 569 return filectxfn2(repo, memctx, path) |
| 566 | 570 |
| 567 extra = util.build_extra(r.revnum, b, svn.uuid, svn.subdir) | 571 extra = util.build_extra(r.revnum, b, svn.uuid, svn.subdir) |
| 568 if '' in files_touched: | 572 if '' in files_touched: |
| 569 files_touched.remove('') | 573 files_touched.remove('') |
| 574 removedFiles = [] | |
| 575 for file in files_touched: | |
| 576 if not hg_editor._is_file_included(file): | |
| 577 removedFiles.append(file) | |
| 578 for file in removedFiles: | |
| 579 files_touched.remove(file) | |
| 570 if parentctx.node() != node.nullid or files_touched: | 580 if parentctx.node() != node.nullid or files_touched: |
| 571 # TODO(augie) remove this debug code? Or maybe it's sane to have it. | 581 # TODO(augie) remove this debug code? Or maybe it's sane to have it. |
| 572 for f in files_touched: | 582 for f in files_touched: |
| 573 if f: | 583 if f: |
| 574 assert f[0] != '/' | 584 assert f[0] != '/' |
