Changeset 3 in tailor
- Timestamp:
- 06/02/04 01:54:08 (9 years ago)
- Hash name:
- 20040601235408-97f81-040659e0708436c8e2843b831586be94d6fd9c66
- Files:
-
- 1 added
- 5 edited
-
cvsync/svn.py (modified) (5 diffs)
-
cvsync/tailor.py (modified) (6 diffs)
-
cvsync/tests/cvs.py (modified) (4 diffs)
-
tailor.py (modified) (1 diff)
-
cvsync/tests/svn.py (modified) (6 diffs)
-
cvsync/darcs.py (added)
Legend:
- Unmodified
- Added
- Removed
-
cvsync/svn.py
r2 r3 139 139 140 140 141 class SvnCheckout(SystemCommand): 142 COMMAND = "svn co --quiet --revision %(revision)s %(repository)s %(wc)s" 143 144 141 145 def getHeadRevision(source, baserev): 142 146 """Using ``svn log`` determine the HEAD revision of a source.""" … … 174 178 return mayberel 175 179 180 def checkout(self, uri): 181 if '@' in uri: 182 src,rev = uri.split('@') 183 else: 184 src = uri 185 rev = "HEAD" 186 187 svnco = SvnCheckout() 188 svnco(repository=src, wc=self.root, revision=rev) 189 return self.info(self.root) 190 176 191 def log(self): 177 192 """Return an object representation of the ``svn log`` thru HEAD.""" … … 200 215 if name == 'logentry': 201 216 self.current = SvnRevisionLogEntry() 202 self.current.revision = int(attributes['revision'])217 self.current.revision = attributes['revision'] 203 218 elif name in ['author', 'date', 'msg']: 204 219 self.current_field = [] … … 268 283 return res 269 284 270 def copy(self, uri, dest , dry_run=False):271 """Copy a source URI to dest."""285 def copy(self, uri, dest=None, dry_run=False): 286 """Copy an external source URI into the working copy.""" 272 287 273 288 from os.path import dirname, commonprefix … … 279 294 rev = "HEAD" 280 295 296 if not dest: 297 dest = self.root 298 281 299 info = self.info(dirname(dest)) 282 300 prefix = commonprefix([info['URL'], src]) -
cvsync/tailor.py
r1 r3 29 29 from optparse import OptionParser, OptionError, OptionGroup, make_option 30 30 from cvsync.svn import SvnWorkingDir, getHeadRevision 31 from cvsync.darcs import DarcsWorkingDir 31 32 32 33 URI_PROPNAME = "bice:upstream-uri" … … 97 98 do_commit = True 98 99 else: 100 ## TODO: handle the --darcs option, executing a svn log 101 ## and replaying the changeset into darcs 102 99 103 if options.svn_update and not options.dry_run: 100 104 self.wc.update() … … 109 113 if do_commit: 110 114 if options.commit: 111 try: 112 print 113 raw_input(PRE_COMMIT_PROMPT) 114 115 message = options.message or options.auto_message 116 status = self.wc.commit(message=message) 117 except KeyboardInterrupt: 118 print "INTERRUPTED BY THE USER!" 115 if options.darcs: 116 self.registerUnderDarcs(patchname, options.message) 117 else: 118 try: 119 print 120 raw_input(PRE_COMMIT_PROMPT) 121 122 message = options.message or options.auto_message 123 status = self.wc.commit(message=message) 124 except KeyboardInterrupt: 125 print "INTERRUPTED BY THE USER!" 119 126 else: 120 127 print "No changes. Good!" … … 176 183 Copy the upstream product and update the properties with 177 184 the upstream information. 178 """ 179 180 if not options.dry_run: 181 info = self.wc.copy(self.uri, self.project) 182 if not options.dry_run: 183 uri = info['Copied From URL'] 184 rev = info['Copied From Rev'] 185 self.updateUpstreamInfo(uri=uri, rev=rev) 186 187 if not options.message: 188 options.auto_message = "Tailorization of %s, " \ 189 "from revision %s" % (uri, rev) 190 185 186 If `options.darcs` is true, do a checkout instead of a copy, 187 and record the whole subtree under darcs. 188 """ 189 190 if options.dry_run: 191 return 192 193 if options.darcs: 194 info = self.wc.checkout(self.uri) 195 uri = info['URL'] 196 rev = info['Revision'] 197 else: 198 info = self.wc.copy(self.uri) 199 uri = info['Copied From URL'] 200 rev = info['Copied From Rev'] 201 self.updateUpstreamInfo(uri=uri, rev=rev) 202 203 if not options.message: 204 options.auto_message = "Tailorization of %s, " \ 205 "from revision %s" % (uri, rev) 206 207 def registerUnderDarcs(self, patchname, logmessage): 208 """ 209 Register the checked out tree under darcs. 210 """ 211 212 dwc = DarcsWorkingDir(self.project) 213 dwc.initialize() 214 dwc.record(patchname, logmessage) 215 191 216 def diff(self): 192 217 """ … … 229 254 "could happen. The collected changelog, if any, " 230 255 "will be echoed on stdout too."), 231 make_option("-b", "--bootstrap", action="store_true", default=False, 232 help="Bootstrap mode, that is the initial copy of the " 233 "upstream tree, given as an URI possibly followed " 234 "by a revision."), 256 make_option("--darcs", action="store_true", default=False, 257 help="Use a darcs repository for the tailorization."), 235 258 make_option("-m", "--message", 236 259 default="", # autogenerated … … 247 270 248 271 ACTIONS = [ 272 make_option("-b", "--bootstrap", action="store_true", default=False, 273 help="Bootstrap mode, that is the initial copy of the " 274 "upstream tree, given as an URI possibly followed " 275 "by a revision."), 249 276 make_option("--info", 250 277 action="store_true", -
cvsync/tests/cvs.py
r1 r3 43 43 if not reposdir: 44 44 from tempfile import mkdtemp 45 reposdir = mkdtemp(prefix="rep") 45 self.tmpdir = reposdir = mkdtemp(prefix="rep") 46 else: 47 self.tmpdir = None 46 48 47 49 self.reposdir = reposdir … … 49 51 self.populateInitial() 50 52 51 def cleanup(self):53 def __del__(self): 52 54 """Remove the repository from the filesystem. 53 55 """ … … 108 110 self.added_dirs = [] 109 111 self.removed_dirs = [] 110 112 111 113 if not tmpdir: 112 114 from tempfile import mkdtemp 113 tmpdir = mkdtemp(prefix="wc") 115 self.tmpdir = tmpdir = mkdtemp(prefix="wc") 116 else: 117 self.tmpdir = None 114 118 115 119 cocmd = CvsCheckout(working_dir=tmpdir) … … 118 122 119 123 self.wcdir = join(tmpdir, 'test') 124 125 def __del__(self): 126 """Cleanup the test working copy.""" 127 128 from shutil import rmtree 129 130 if self.tmpdir: 131 rmtree(self.tmpdir) 120 132 121 133 def commit(self, msg): -
tailor.py
r1 r3 20 20 $ tailor.py --bootstrap ~/svnwc/MyProduct http://svn.example.com/Product@10 21 21 22 # Alternatively, use darcs for the tailorization 23 $ tailor.py --darcs --bootstrap ~/svnwc/MyProduct file:///repos/Product@10 24 22 25 # Merge upstream changes since last update/bootstrap 23 $ tailor.py ~/svnwc/MyProduct s26 $ tailor.py ~/svnwc/MyProduct 24 27 25 28 # Show what's changed in current working directory -
cvsync/tests/svn.py
r2 r3 22 22 23 23 24 class SvnCheckout(SystemCommand):25 COMMAND = "svn co --quiet --revision 0 %(repository)s %(wc)s"26 27 28 24 class TestRepository(object): 29 25 """A simple wrapper to a svn repository.""" … … 48 44 repository=self.repospath) 49 45 50 51 class SvnLogTest(TestCase):52 """Test `svn log` parse functionality."""53 46 47 class SvnBasicTest(TestCase): 48 """Test basic svn related functionalities.""" 49 54 50 def __init__(self, methodName): 55 51 TestCase.__init__(self, methodName) … … 58 54 self.repos = TestRepository(repos) 59 55 wc = '/tmp/cvsync.wc' 60 svnco = SvnCheckout()61 svnco(repository=self.repos.reposurl, wc=wc)62 56 self.wc = SvnWorkingDir(wc) 63 57 58 def testCheckout(self): 59 """Verify that svn checkout returns right info""" 60 61 info = self.wc.checkout(self.repos.reposurl+'@0') 62 self.assertEqual(info['URL'], self.repos.reposurl) 63 self.assertEqual(info['Revision'], '0') 64 65 class SvnLogTest(TestCase): 66 """Test `svn log` parse functionality.""" 67 68 def __init__(self, methodName): 69 from os.path import exists 70 71 TestCase.__init__(self, methodName) 72 73 repos = '/tmp/cvsync.test' 74 self.repos = TestRepository(repos) 75 wc = '/tmp/cvsync.wc' 76 self.wc = SvnWorkingDir(wc) 77 if not exists(wc): 78 self.wc.checkout(self.repos.reposurl + '@0') 79 64 80 def testLogParser(self): 65 81 """Verify the `svn log` parser""" … … 68 84 self.assertEqual(len(revisions), 3) 69 85 70 self.assertEqual(revisions[0].revision, 1)86 self.assertEqual(revisions[0].revision, '1') 71 87 self.assertEqual(revisions[0].author, 'lele') 72 88 self.assertEqual(revisions[0].date, '2004-05-31T14:38:46.210103Z') … … 79 95 (u'/FileB.txt', u'A')]) 80 96 81 self.assertEqual(revisions[1].revision, 2)97 self.assertEqual(revisions[1].revision, '2') 82 98 self.assertEqual(revisions[1].author, 'lele') 83 99 self.assertEqual(revisions[1].date, '2004-05-31T14:40:58.583701Z') … … 87 103 (u'/FileA.txt', u'M')]) 88 104 89 self.assertEqual(revisions[2].revision, 3)105 self.assertEqual(revisions[2].revision, '3') 90 106 self.assertEqual(revisions[2].author, 'lele') 91 107 self.assertEqual(revisions[2].date, '2004-06-01T13:52:35.711425Z')
Note: See TracChangeset
for help on using the changeset viewer.
