Mercurial > hg
comparison hgext/convert/subversion.py @ 5554:2147a734dcf9
convert: tell the source repository when a rev has been converted
This lets us roundtrip changes between svn and hg.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Mon, 26 Nov 2007 17:23:20 -0800 |
parents | e01c748cb632 |
children | 6e1a61b14bbf |
comparison
equal
deleted
inserted
replaced
5553:ee80591f5636 | 5554:2147a734dcf9 |
---|---|
151 | 151 |
152 self.last_changed = self.latest(self.module, latest) | 152 self.last_changed = self.latest(self.module, latest) |
153 | 153 |
154 self.head = self.revid(self.last_changed) | 154 self.head = self.revid(self.last_changed) |
155 self._changescache = None | 155 self._changescache = None |
156 | |
157 if os.path.exists(os.path.join(url, '.svn/entries')): | |
158 self.wc = url | |
159 else: | |
160 self.wc = None | |
161 self.convertfp = None | |
156 | 162 |
157 def setrevmap(self, revmap): | 163 def setrevmap(self, revmap): |
158 lastrevs = {} | 164 lastrevs = {} |
159 for revid in revmap.iterkeys(): | 165 for revid in revmap.iterkeys(): |
160 uuid, module, revnum = self.revsplit(revid) | 166 uuid, module, revnum = self.revsplit(revid) |
295 tag = path.split('/')[-1] | 301 tag = path.split('/')[-1] |
296 tags[tag] = self.revid(rev, module=source) | 302 tags[tag] = self.revid(rev, module=source) |
297 except SubversionException, (inst, num): | 303 except SubversionException, (inst, num): |
298 self.ui.note('no tags found at revision %d\n' % start) | 304 self.ui.note('no tags found at revision %d\n' % start) |
299 return tags | 305 return tags |
306 | |
307 def converted(self, rev, destrev): | |
308 if not self.wc: | |
309 return | |
310 if self.convertfp is None: | |
311 self.convertfp = open(os.path.join(self.wc, '.svn', 'hg-shamap'), | |
312 'a') | |
313 self.convertfp.write('%s %d\n' % (destrev, self.revnum(rev))) | |
314 self.convertfp.flush() | |
300 | 315 |
301 # -- helper functions -- | 316 # -- helper functions -- |
302 | 317 |
303 def revid(self, revnum, module=None): | 318 def revid(self, revnum, module=None): |
304 if not module: | 319 if not module: |
747 fp = open(hook, 'w') | 762 fp = open(hook, 'w') |
748 fp.write(pre_revprop_change) | 763 fp.write(pre_revprop_change) |
749 fp.close() | 764 fp.close() |
750 util.set_exec(hook, True) | 765 util.set_exec(hook, True) |
751 | 766 |
767 xport = transport.SvnRaTransport(url=geturl(path)) | |
768 self.uuid = svn.ra.get_uuid(xport.ra) | |
769 | |
752 def wjoin(self, *names): | 770 def wjoin(self, *names): |
753 return os.path.join(self.wc, *names) | 771 return os.path.join(self.wc, *names) |
754 | 772 |
755 def putfile(self, filename, flags, data): | 773 def putfile(self, filename, flags, data): |
756 if 'l' in flags: | 774 if 'l' in flags: |
835 return deleted | 853 return deleted |
836 | 854 |
837 def addchild(self, parent, child): | 855 def addchild(self, parent, child): |
838 self.childmap[parent] = child | 856 self.childmap[parent] = child |
839 | 857 |
858 def revid(self, rev): | |
859 return u"svn:%s@%s" % (self.uuid, rev) | |
860 | |
840 def putcommit(self, files, parents, commit): | 861 def putcommit(self, files, parents, commit): |
841 for parent in parents: | 862 for parent in parents: |
842 try: | 863 try: |
843 return self.childmap[parent] | 864 return self.revid(self.childmap[parent]) |
844 except KeyError: | 865 except KeyError: |
845 pass | 866 pass |
846 entries = set(self.delete) | 867 entries = set(self.delete) |
847 if self.delete: | 868 if self.delete: |
848 self.run0('delete', *self.delete) | 869 self.run0('delete', *self.delete) |
871 if commit.branch and commit.branch != 'default': | 892 if commit.branch and commit.branch != 'default': |
872 self.run('propset', 'hg:convert-branch', commit.branch, | 893 self.run('propset', 'hg:convert-branch', commit.branch, |
873 revprop=True, revision=rev) | 894 revprop=True, revision=rev) |
874 for parent in parents: | 895 for parent in parents: |
875 self.addchild(parent, rev) | 896 self.addchild(parent, rev) |
876 return rev | 897 return self.revid(rev) |
877 finally: | 898 finally: |
878 os.unlink(messagefile) | 899 os.unlink(messagefile) |
879 | 900 |
880 def puttags(self, tags): | 901 def puttags(self, tags): |
881 self.ui.warn(_('XXX TAGS NOT IMPLEMENTED YET\n')) | 902 self.ui.warn(_('XXX TAGS NOT IMPLEMENTED YET\n')) |