Changeset 336 in tailor
- Timestamp:
- 05/25/05 23:44:33 (8 years ago)
- Hash name:
- 20050525214433-97f81-dccdfb7f9b951b1fb4ef5908d36ca059b3fd5ba5
- Location:
- vcpx
- Files:
-
- 2 edited
-
changes.py (modified) (1 diff)
-
session.py (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
vcpx/changes.py
r335 r336 31 31 CONFLICT = 'CONFLICT' 32 32 33 __slots__ = ('name', 'old_name',34 'old_revision', 'new_revision',35 'action_kind', 'status', 'unidiff')36 37 33 def __init__(self, name): 38 34 self.name = name -
vcpx/session.py
r334 r336 63 63 64 64 self.state_file = None 65 66 65 self.logfile = None 67 66 self.logger = None … … 69 68 self.__processArgs() 70 69 70 # Persistent 71 72 self.changesets = None 73 self.source_revision = None 74 71 75 def __processArgs(self): 72 76 """ … … 94 98 self.stdout.write(what) 95 99 96 97 ## Interactive commands 98 100 99 101 def emptyline(self): 100 102 """Override the default impl of reexecuting last command.""" … … 111 113 return line 112 114 115 ## Interactive commands 116 113 117 def do_exit(self, arg): 114 118 """ … … 349 353 self.__log('Current target module: %s\n' % self.target_module) 350 354 351 def readSourceRevision(self): 352 """Read the source revision from the state file.""" 355 def loadStateFile(self): 356 """ 357 Read the source revision and pending changesets from the state file. 358 """ 359 360 from cPickle import load 353 361 354 362 try: 355 363 sf = open(self.state_file) 356 revision = sf.read()364 self.source_revision, self.changesets = load(sf) 357 365 sf.close() 366 367 self.__log('Source revision: %s\n' % self.source_revision) 368 if self.changesets: 369 self.__log('Pending changesets: %d\n' % len(self.changesets)) 358 370 except IOError: 359 revision = None 360 361 return revision 362 363 def saveSourceRevision(self, revision): 364 """Write current source revision in the state file.""" 365 371 self.source_revision = None 372 self.changesets = None 373 374 def writeStateFile(self): 375 """ 376 Write current source revision and pending changesets in the state file. 377 """ 378 379 from cPickle import dump 380 366 381 sf = open(self.state_file, 'w') 367 sf.write(revision)382 dump((self.source_revision, self.changesets), sf) 368 383 sf.close() 369 384 370 385 def do_state_file(self, arg): 371 386 """ … … 380 395 381 396 from os.path import isabs, abspath, expanduser 382 397 from cPickle import load 398 383 399 if arg: 384 400 arg = expanduser(arg) … … 388 404 if arg and self.state_file <> arg: 389 405 self.state_file = arg 390 406 391 407 self.__log('Current state file: %s\n' % self.state_file) 408 409 self.loadStateFile() 392 410 393 411 def do_bootstrap(self, arg): … … 406 424 self.__err('Need a state_file to proceed!\n') 407 425 return 408 426 427 if self.source_revision is not None: 428 self.__err('Already bootstrapped!') 429 409 430 if self.sub_directory: 410 431 subdir = self.sub_directory … … 422 443 423 444 try: 424 actual = dwd.checkoutUpstreamRevision(self.current_directory, 425 self.source_repository, 426 self.source_module, 427 revision, 428 subdir=subdir, 429 logger=self.logger) 430 self.saveSourceRevision(actual) 445 self.source_revision = dwd.checkoutUpstreamRevision( 446 self.current_directory, self.source_repository, 447 self.source_module, revision, 448 subdir=subdir, logger=self.logger) 431 449 except Exception, exc: 432 450 self.__err('Checkout failed: %s, %s' % (exc.__doc__, exc)) … … 434 452 self.logger.exception('Checkout failed') 435 453 454 self.writeStateFile() 455 436 456 try: 437 457 dwd.initializeNewWorkingDir(self.current_directory, … … 439 459 self.target_module, 440 460 self.sub_directory, 441 actual)461 self.source_revision) 442 462 except Exception, exc: 443 463 self.__err('Working copy initialization failed: %s, %s' % … … 460 480 """ 461 481 462 self.stdout.write(" Changeset %s:\n%s\n" % (changeset.revision,463 changeset.log))482 self.stdout.write("\nChangeset %s:\n%s\n" % (changeset.revision, 483 changeset.log)) 464 484 465 485 while 1: … … 488 508 """ 489 509 490 self.saveSourceRevision(changeset.revision) 510 self.source_revision = changeset.revision 511 self.changesets.remove(changeset) 491 512 492 513 def do_update(self, arg): … … 510 531 return 511 532 512 source_revision = self.readSourceRevision() 513 if not source_revision: 533 if self.source_revision is None: 514 534 self.__err("Not yet bootstrapped!\n") 515 535 return … … 524 544 repodir = join(self.current_directory, subdir) 525 545 dwd = DualWorkingDir(self.source_kind, self.target_kind) 526 changesets = dwd.getUpstreamChangesets(repodir, 527 self.source_repository, 528 self.source_module, 529 source_revision) 530 nchanges = len(changesets) 531 if nchanges: 532 self.__log('Collected %d upstream changesets\n' % nchanges) 533 534 if arg: 535 applyable = self.willApply 536 try: 537 howmany = min(int(arg), nchanges) 538 changesets = changesets[:howmany] 539 self.__log('Applying first %d of them\n' % howmany) 540 except ValueError: 541 if arg.lower() == 'ask': 542 applyable = self.shouldApply 543 546 547 # If we have no pending changesets, ask the upstream server 548 # about new changes 549 550 if not self.changesets: 544 551 try: 545 last, conflicts = dwd.applyUpstreamChangesets( 546 repodir, self.source_module, changesets, 547 applyable=applyable, applied=self.applied, 548 logger=self.logger) # , delayed_commit=single_commit) 549 except StopIteration, KeyboardInterrupt: 552 self.changesets = dwd.getUpstreamChangesets( 553 repodir, 554 self.source_repository, 555 self.source_module, 556 self.source_revision) 557 except KeyboardInterrupt: 550 558 if self.logger: 551 559 self.logger.warning("Stopped by user") … … 553 561 except: 554 562 if self.logger: 555 self.logger.exception('Upstream change application ' 556 'failed') 557 self.__err('Stopping after upstream change application ' 558 'failure.') 563 self.logger.exception('Unable to collect upstream changes') 564 self.__err('Unable to collect upstream changes') 559 565 return 560 561 if last: 562 self.__log("Update completed, now at revision '%s'" % 563 self.readSourceRevision()) 566 567 nchanges = len(self.changesets) 568 if nchanges: 569 if arg: 570 applyable = self.willApply 571 try: 572 howmany = min(int(arg), nchanges) 573 changesets = self.changesets[:howmany] 574 except ValueError: 575 changesets = self.changesets[:] 576 if arg.lower() == 'ask': 577 applyable = self.shouldApply 578 579 self.__log('Applying %d changesets (out of %d)\n' % 580 (len(changesets), nchanges)) 581 582 last = None 583 try: 584 try: 585 last, conflicts = dwd.applyUpstreamChangesets( 586 repodir, self.source_module, changesets, 587 applyable=applyable, applied=self.applied, 588 logger=self.logger) # , delayed_commit=single_commit) 589 except StopIteration, KeyboardInterrupt: 590 if self.logger: 591 self.logger.warning("Stopped by user") 592 return 593 except: 594 if self.logger: 595 self.logger.exception('Upstream change application ' 596 'failed') 597 self.__err('Stopping after upstream change application ' 598 'failure.') 599 return 600 finally: 601 self.writeStateFile() 602 603 if self.changesets: 604 self.__log("There are still %d pending changesets, " 605 "now at revision '%s'\n" % 606 (len(self.changesets), self.source_revision)) 607 else: 608 self.__log("Update completed, now at revision '%s'\n" % 609 self.source_revision) 564 610 else: 565 611 self.__log("Update completed with no upstream changes")
Note: See TracChangeset
for help on using the changeset viewer.
