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'))