Mercurial > hgsubversion
comparison hg_delta_editor.py @ 116:30580c05dccc
hg_delta_editor: merge _is_path_valid() and _path_and_branch_from_path()
| author | Patrick Mezard <pmezard@gmail.com> |
|---|---|
| date | Sat, 29 Nov 2008 11:24:31 -0600 |
| parents | 5497d1264b4d |
| children | ea65fe2b0856 |
comparison
equal
deleted
inserted
replaced
| 115:ed42f6e5705a | 116:30580c05dccc |
|---|---|
| 145 '''Given a list of paths, return mapping of all branches touched | 145 '''Given a list of paths, return mapping of all branches touched |
| 146 to their branch path. | 146 to their branch path. |
| 147 ''' | 147 ''' |
| 148 branches = {} | 148 branches = {} |
| 149 for p in paths: | 149 for p in paths: |
| 150 if self._is_path_valid(p): | 150 relpath, branch, branchpath = self._split_branch_path(p) |
| 151 junk, branch, branchpath = self._split_branch_path(p) | 151 if relpath is not None: |
| 152 branches[branch] = branchpath | 152 branches[branch] = branchpath |
| 153 return branches | 153 return branches |
| 154 | 154 |
| 155 def _path_and_branch_for_path(self, path): | 155 def _path_and_branch_for_path(self, path): |
| 156 return self._split_branch_path(path)[:2] | 156 return self._split_branch_path(path)[:2] |
| 168 p = p[1:] | 168 p = p[1:] |
| 169 return p, None, 'trunk' | 169 return p, None, 'trunk' |
| 170 elif path.startswith('branches/'): | 170 elif path.startswith('branches/'): |
| 171 p = path[len('branches/'):] | 171 p = path[len('branches/'):] |
| 172 br = p.split('/')[0] | 172 br = p.split('/')[0] |
| 173 p = p[len(br)+1:] | 173 if br: |
| 174 if p and p[0] == '/': | 174 p = p[len(br)+1:] |
| 175 p = p[1:] | 175 if p and p[0] == '/': |
| 176 return p, br, 'branches/' + br | 176 p = p[1:] |
| 177 return p, br, 'branches/' + br | |
| 177 return None, None, None | 178 return None, None, None |
| 178 raise Exception,'Things went boom: ' + path | |
| 179 | 179 |
| 180 def set_current_rev(self, rev): | 180 def set_current_rev(self, rev): |
| 181 '''Set the revision we're currently converting. | 181 '''Set the revision we're currently converting. |
| 182 ''' | 182 ''' |
| 183 self.current_rev = rev | 183 self.current_rev = rev |
| 200 if path and path[0] == '/': | 200 if path and path[0] == '/': |
| 201 path = path[1:] | 201 path = path[1:] |
| 202 return path | 202 return path |
| 203 | 203 |
| 204 def _is_path_valid(self, path): | 204 def _is_path_valid(self, path): |
| 205 path = self._normalize_path(path) | 205 return self._split_branch_path(path)[0] is not None |
| 206 if path.startswith('trunk'): | |
| 207 return True | |
| 208 elif path.startswith('branches/'): | |
| 209 br = path.split('/')[1] | |
| 210 return len(br) > 0 | |
| 211 return False | |
| 212 | 206 |
| 213 def _is_path_tag(self, path): | 207 def _is_path_tag(self, path): |
| 214 """If path represents the path to a tag, returns the tag name. | 208 """If path represents the path to a tag, returns the tag name. |
| 215 | 209 |
| 216 Otherwise, returns False. | 210 Otherwise, returns False. |
| 260 added_branches = {} | 254 added_branches = {} |
| 261 added_tags = {} | 255 added_tags = {} |
| 262 tags_to_delete = set() | 256 tags_to_delete = set() |
| 263 branches_to_delete = set() | 257 branches_to_delete = set() |
| 264 for p in paths: | 258 for p in paths: |
| 265 if self._is_path_valid(p): | 259 fi, br = self._path_and_branch_for_path(p) |
| 266 fi, br = self._path_and_branch_for_path(p) | 260 if fi is not None: |
| 267 if fi == '' and br not in self.branches: | 261 if fi == '' and br not in self.branches: |
| 268 src_p = paths[p].copyfrom_path | 262 src_p = paths[p].copyfrom_path |
| 269 src_rev = paths[p].copyfrom_rev | 263 src_rev = paths[p].copyfrom_rev |
| 270 src_tag = self._is_path_tag(src_p) | 264 src_tag = self._is_path_tag(src_p) |
| 271 | 265 |
| 278 src_rev = revision.revnum | 272 src_rev = revision.revnum |
| 279 elif src_tag: | 273 elif src_tag: |
| 280 # this is a branch created from a tag. Note that this | 274 # this is a branch created from a tag. Note that this |
| 281 # really does happen (see Django) | 275 # really does happen (see Django) |
| 282 src_branch, src_rev = self.tags[src_tag] | 276 src_branch, src_rev = self.tags[src_tag] |
| 283 added_branches[br] = (src_branch, src_rev, | |
| 284 revision.revnum) | |
| 285 else: | 277 else: |
| 286 # Not from a tag, and from a valid repo path | 278 # Not from a tag, and from a valid repo path |
| 287 (src_p, | 279 (src_p, |
| 288 src_branch) = self._path_and_branch_for_path(src_p) | 280 src_branch) = self._path_and_branch_for_path(src_p) |
| 281 if src_p is None: | |
| 282 continue | |
| 289 added_branches[br] = src_branch, src_rev, revision.revnum | 283 added_branches[br] = src_branch, src_rev, revision.revnum |
| 290 elif fi == '' and br in self.branches: | 284 elif fi == '' and br in self.branches: |
| 291 br2 = br or 'default' | 285 br2 = br or 'default' |
| 292 if br2 not in self.repo.branchtags() and paths[p].action == 'D': | 286 if br2 not in self.repo.branchtags() and paths[p].action == 'D': |
| 293 branches_to_delete.add(br) | 287 branches_to_delete.add(br) |
| 301 continue | 295 continue |
| 302 src_p, src_rev = paths[p].copyfrom_path, paths[p].copyfrom_rev | 296 src_p, src_rev = paths[p].copyfrom_path, paths[p].copyfrom_rev |
| 303 # if you commit to a tag, I'm calling you stupid and ignoring | 297 # if you commit to a tag, I'm calling you stupid and ignoring |
| 304 # you. | 298 # you. |
| 305 if src_p is not None and src_rev is not None: | 299 if src_p is not None and src_rev is not None: |
| 306 if self._is_path_valid(src_p): | 300 file, branch = self._path_and_branch_for_path(src_p) |
| 307 file, branch = self._path_and_branch_for_path(src_p) | 301 if file is None: |
| 308 else: | |
| 309 # some crazy people make tags from other tags | 302 # some crazy people make tags from other tags |
| 310 file = '' | 303 file = '' |
| 311 from_tag = self._is_path_tag(src_p) | 304 from_tag = self._is_path_tag(src_p) |
| 312 if not from_tag: | 305 if not from_tag: |
| 313 continue | 306 continue |
| 466 def url(self): | 459 def url(self): |
| 467 return open(self.svn_url_file).read() | 460 return open(self.svn_url_file).read() |
| 468 | 461 |
| 469 @stash_exception_on_self | 462 @stash_exception_on_self |
| 470 def delete_entry(self, path, revision_bogus, parent_baton, pool=None): | 463 def delete_entry(self, path, revision_bogus, parent_baton, pool=None): |
| 471 if self._is_path_valid(path): | 464 br_path, branch = self._path_and_branch_for_path(path) |
| 472 br_path, branch = self._path_and_branch_for_path(path) | 465 if br_path is not None: |
| 473 ha = self.get_parent_revision(self.current_rev.revnum, branch) | 466 ha = self.get_parent_revision(self.current_rev.revnum, branch) |
| 474 if ha == revlog.nullid: | 467 if ha == revlog.nullid: |
| 475 return | 468 return |
| 476 ctx = self.repo.changectx(ha) | 469 ctx = self.repo.changectx(ha) |
| 477 if br_path not in ctx: | 470 if br_path not in ctx: |
| 569 self.copies[path] = from_file | 562 self.copies[path] = from_file |
| 570 | 563 |
| 571 @stash_exception_on_self | 564 @stash_exception_on_self |
| 572 def add_directory(self, path, parent_baton, copyfrom_path, | 565 def add_directory(self, path, parent_baton, copyfrom_path, |
| 573 copyfrom_revision, dir_pool=None): | 566 copyfrom_revision, dir_pool=None): |
| 574 if self._is_path_valid(path): | 567 br_path, branch = self._path_and_branch_for_path(path) |
| 575 junk, branch = self._path_and_branch_for_path(path) | 568 if br_path is not None: |
| 576 if not copyfrom_path and not junk: | 569 if not copyfrom_path and not br_path: |
| 577 self.commit_branches_empty[branch] = True | 570 self.commit_branches_empty[branch] = True |
| 578 else: | 571 else: |
| 579 self.commit_branches_empty[branch] = False | 572 self.commit_branches_empty[branch] = False |
| 580 if not self._is_path_valid(path) or not copyfrom_path: | 573 if br_path is None or not copyfrom_path: |
| 581 return | 574 return |
| 582 if copyfrom_path: | 575 if copyfrom_path: |
| 583 tag = self._is_path_tag(copyfrom_path) | 576 tag = self._is_path_tag(copyfrom_path) |
| 584 if tag not in self.tags: | 577 if tag not in self.tags: |
| 585 tag = None | 578 tag = None |
| 631 elif name == 'svn:special': | 624 elif name == 'svn:special': |
| 632 self.current_files_symlink[self.current_file] = bool(value is not None) | 625 self.current_files_symlink[self.current_file] = bool(value is not None) |
| 633 | 626 |
| 634 @stash_exception_on_self | 627 @stash_exception_on_self |
| 635 def open_directory(self, path, parent_baton, base_revision, dir_pool=None): | 628 def open_directory(self, path, parent_baton, base_revision, dir_pool=None): |
| 636 if self._is_path_valid(path): | 629 p_, branch = self._path_and_branch_for_path(path) |
| 637 p_, branch = self._path_and_branch_for_path(path) | 630 if p_ == '': |
| 638 if p_ == '': | 631 self.commit_branches_empty[branch] = False |
| 639 self.commit_branches_empty[branch] = False | |
| 640 | 632 |
| 641 @stash_exception_on_self | 633 @stash_exception_on_self |
| 642 def apply_textdelta(self, file_baton, base_checksum, pool=None): | 634 def apply_textdelta(self, file_baton, base_checksum, pool=None): |
| 643 base = '' | 635 base = '' |
| 644 if not self._is_path_valid(self.current_file): | 636 if not self._is_path_valid(self.current_file): |
