Mercurial > hgsubversion
comparison hg_delta_editor.py @ 67:e319c9168910
hg_delta_editor: register svn file copies
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Wed, 05 Nov 2008 13:37:07 +0100 |
parents | 430af23bef4a |
children | 63ece4ea25c9 |
comparison
equal
deleted
inserted
replaced
66:a31968146f3c | 67:e319c9168910 |
---|---|
125 self.current_files = {} | 125 self.current_files = {} |
126 self.deleted_files = {} | 126 self.deleted_files = {} |
127 self.current_rev = None | 127 self.current_rev = None |
128 self.current_files_exec = {} | 128 self.current_files_exec = {} |
129 self.current_files_symlink = {} | 129 self.current_files_symlink = {} |
130 # Map fully qualified destination file paths to module source path | |
131 self.copies = {} | |
130 self.missing_plaintexts = set() | 132 self.missing_plaintexts = set() |
131 self.commit_branches_empty = {} | 133 self.commit_branches_empty = {} |
132 self.base_revision = None | 134 self.base_revision = None |
133 | 135 |
134 def _save_metadata(self): | 136 def _save_metadata(self): |
349 if branch not in self.branches and branch not in self.repo.branchtags(): | 351 if branch not in self.branches and branch not in self.repo.branchtags(): |
350 continue | 352 continue |
351 extra['branch'] = branch | 353 extra['branch'] = branch |
352 parent_ctx = self.repo.changectx(parents[0]) | 354 parent_ctx = self.repo.changectx(parents[0]) |
353 def filectxfn(repo, memctx, path): | 355 def filectxfn(repo, memctx, path): |
354 copied = None | |
355 current_file = files[path] | 356 current_file = files[path] |
356 if current_file in self.deleted_files: | 357 if current_file in self.deleted_files: |
357 raise IOError() | 358 raise IOError() |
358 # TODO(augie) tag copies from files | 359 copied = self.copies.get(current_file) |
359 flags = parent_ctx.flags(path) | 360 flags = parent_ctx.flags(path) |
360 is_exec = self.current_files_exec.get(current_file, | 361 is_exec = self.current_files_exec.get(current_file, |
361 'x' in flags) | 362 'x' in flags) |
362 is_link = self.current_files_symlink.get(current_file, | 363 is_link = self.current_files_symlink.get(current_file, |
363 'l' in flags) | 364 'l' in flags) |
499 copyfrom_revision, file_pool=None): | 500 copyfrom_revision, file_pool=None): |
500 self.current_file = 'foobaz' | 501 self.current_file = 'foobaz' |
501 self.base_revision = None | 502 self.base_revision = None |
502 if path in self.deleted_files: | 503 if path in self.deleted_files: |
503 del self.deleted_files[path] | 504 del self.deleted_files[path] |
504 if (self._is_path_valid(path) and | 505 if not self._is_path_valid(path): |
505 self._path_and_branch_for_path(path)[0]): | 506 return |
506 self.current_file = path | 507 fpath, branch = self._path_and_branch_for_path(path) |
507 self.should_edit_most_recent_plaintext = False | 508 if not fpath: |
508 if copyfrom_path: | 509 return |
509 self.ui.status('A+ %s\n' % path) | 510 self.current_file = path |
510 # TODO(augie) handle this better, actually mark a copy | 511 self.should_edit_most_recent_plaintext = False |
511 (from_file, | 512 if not copyfrom_path: |
512 from_branch) = self._path_and_branch_for_path(copyfrom_path) | 513 self.ui.status('A %s\n' % path) |
513 if not from_file: | 514 return |
514 self.missing_plaintexts.add(path) | 515 self.ui.status('A+ %s\n' % path) |
515 return | 516 (from_file, |
516 ha = self.get_parent_revision(copyfrom_revision + 1, | 517 from_branch) = self._path_and_branch_for_path(copyfrom_path) |
517 from_branch) | 518 if not from_file: |
518 ctx = self.repo.changectx(ha) | 519 self.missing_plaintexts.add(path) |
519 if from_file in ctx: | 520 return |
520 fctx = ctx.filectx(from_file) | 521 ha = self.get_parent_revision(copyfrom_revision + 1, |
521 cur_file = self.current_file | 522 from_branch) |
522 self.current_files[cur_file] = fctx.data() | 523 ctx = self.repo.changectx(ha) |
523 self.current_files_symlink[cur_file] = 'l' in fctx.flags() | 524 if from_file in ctx: |
524 self.current_files_exec[cur_file] = 'x' in fctx.flags() | 525 fctx = ctx.filectx(from_file) |
525 else: | 526 cur_file = self.current_file |
526 self.ui.status('A %s\n' % path) | 527 self.current_files[cur_file] = fctx.data() |
527 | 528 self.current_files_symlink[cur_file] = 'l' in fctx.flags() |
529 self.current_files_exec[cur_file] = 'x' in fctx.flags() | |
530 if from_branch == branch: | |
531 self.copies[path] = from_file | |
528 | 532 |
529 @stash_exception_on_self | 533 @stash_exception_on_self |
530 def add_directory(self, path, parent_baton, copyfrom_path, | 534 def add_directory(self, path, parent_baton, copyfrom_path, |
531 copyfrom_revision, dir_pool=None): | 535 copyfrom_revision, dir_pool=None): |
532 if self._is_path_valid(path): | 536 if self._is_path_valid(path): |
569 self.current_files[fp_c] = fctx.data() | 573 self.current_files[fp_c] = fctx.data() |
570 self.current_files_exec[fp_c] = 'x' in fctx.flags() | 574 self.current_files_exec[fp_c] = 'x' in fctx.flags() |
571 self.current_files_symlink[fp_c] = 'l' in fctx.flags() | 575 self.current_files_symlink[fp_c] = 'l' in fctx.flags() |
572 if fp_c in self.deleted_files: | 576 if fp_c in self.deleted_files: |
573 del self.deleted_files[fp_c] | 577 del self.deleted_files[fp_c] |
574 # TODO(augie) tag copies from files | 578 if branch == source_branch: |
579 self.copies[fp_c] = f | |
575 | 580 |
576 @stash_exception_on_self | 581 @stash_exception_on_self |
577 def change_file_prop(self, file_baton, name, value, pool=None): | 582 def change_file_prop(self, file_baton, name, value, pool=None): |
578 if name == 'svn:executable': | 583 if name == 'svn:executable': |
579 self.current_files_exec[self.current_file] = bool(value) | 584 self.current_files_exec[self.current_file] = bool(value) |