~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to baz2bzr

  • Committer: Aaron Bentley
  • Date: 2005-06-03 17:53:35 UTC
  • Revision ID: abentley@panoramicfeedback.com-20050603175335-5a070cee3f02bb27
Applied John Meinel's options patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
172
172
    return ancestors
173
173
 
174
174
 
175
 
def import_version(output_dir, version, fancy=True):
 
175
def import_version(output_dir, version, fancy=True, fast=False, verbose=False, dry_run=False, max_count=None):
176
176
    """
177
177
    >>> q = test_environ()
178
178
    >>> result_path = os.path.join(q, "result")
181
181
    >>> import_version(result_path, version, fancy=False)
182
182
    not fancy
183
183
    ....
 
184
    Cleaning up
184
185
    Import complete.
185
186
    >>> teardown_environ(q)
186
187
    """
190
191
    try:
191
192
        if not fancy:
192
193
            print "not fancy"
193
 
        for result in iter_import_version(output_dir, version, tempdir):
 
194
        for result in iter_import_version(output_dir, version, tempdir,
 
195
                fast=fast, verbose=verbose, dry_run=dry_run, max_count=max_count):
194
196
            if fancy:
195
197
                progress_bar(result)
196
198
            else:
200
202
            clear_progress_bar()
201
203
        else:
202
204
            sys.stdout.write('\n')
 
205
        print 'Cleaning up'
203
206
        shutil.rmtree(tempdir)
204
207
    print "Import complete."
205
208
            
224
227
    """
225
228
    return "Arch-x:%s" % str(arch_revision).replace('/', '%')
226
229
 
227
 
def iter_import_version(output_dir, version, tempdir):
 
230
def iter_import_version(output_dir, version, tempdir, fast=False, verbose=False, dry_run=False, max_count=None):
228
231
    revdir = None
229
232
    ancestors = version_ancestry(version)
230
233
    last_patch = None
270
273
 
271
274
    # Uncomment this for testing, it basically just has baz2bzr only update
272
275
    # 5 patches at a time
273
 
    #ancestors = ancestors[:5]
 
276
    if max_count:
 
277
        ancestors = ancestors[:max_count]
 
278
 
 
279
    # Not sure if I want this output. basically it tells you ahead of time
 
280
    # what it is going to do, but then later it tells you as it is doing it.
 
281
    # what probably would be best would be to collapse it into ranges, so that
 
282
    # this gives the simple view, and then later it gives the blow by blow.
 
283
    #if verbose:
 
284
    #    print 'Adding the following revisions:'
 
285
    #    for a in ancestors:
 
286
    #        print '\t%s' % a
 
287
 
 
288
    previous_version=None
274
289
 
275
290
    for i in range(len(ancestors)):
276
291
        revision = ancestors[i]
277
 
        yield Progress("revisions", i, len(ancestors))
 
292
        if verbose:
 
293
            version = str(revision.version)
 
294
            if version != previous_version:
 
295
                clear_progress_bar()
 
296
                print '\rOn version: %s' % version
 
297
            yield Progress(str(revision.patchlevel), i, len(ancestors))
 
298
            previous_version = version
 
299
        else:
 
300
            yield Progress("revisions", i, len(ancestors))
278
301
        if revdir is None:
279
302
            revdir = os.path.join(tempdir, "rd")
280
303
            baz_inv, log = get_revision(revdir, revision, skip_symlink=True)
299
322
            branch.unlock()
300
323
    yield Progress("revisions", len(ancestors), len(ancestors))
301
324
    unlink_unversioned(branch, revdir)
 
325
    if dry_run:
 
326
        print '**Dry run, not modifying output_dir'
 
327
        return
302
328
    if os.path.exists(output_dir):
303
329
        # Move the bzr control directory back, and update the working tree
304
330
        tmp_bzr_dir = os.path.join(tempdir, '.bzr')
388
414
    bzr_inv.sort()
389
415
    return bzr_inv
390
416
 
391
 
if len(sys.argv) == 2 and sys.argv[1] == "test":
392
 
    print "Running tests"
393
 
    import doctest
394
 
    doctest.testmod()
395
 
elif len(sys.argv) == 3:
396
 
    try:
397
 
        output_dir = os.path.realpath(sys.argv[2])
398
 
        import_version(output_dir, pybaz.Version(sys.argv[1]))
399
 
    except UserError, e:
400
 
        print e
401
 
    except KeyboardInterrupt:
402
 
        print "Aborted."
403
 
else:
404
 
    print "usage: %s VERSION OUTDIR" % os.path.basename(sys.argv[0])
 
417
def main(args):
 
418
    """Just the main() function for this script.
 
419
 
 
420
    By separating it into a function, this can be called as a child from some other
 
421
    script.
 
422
 
 
423
    :param args: The arguments to this script. Essentially sys.argv[1:]
 
424
    """
 
425
    import optparse
 
426
    parser = optparse.OptionParser(usage='%prog [options] VERSION OUTDIR'
 
427
        '\n  VERSION is the arch version to import.'
 
428
        '\n  OUTDIR can be an existing directory to be updated'
 
429
        '\n         or a new directory which will be created from scratch.')
 
430
    parser.add_option('--verbose', action='store_true'
 
431
        , help='Get chatty')
 
432
 
 
433
    g = optparse.OptionGroup(parser, 'Progress options', 'Control how progress is given')
 
434
    g.add_option('--not-fancy', dest='fancy', action='store_false')
 
435
    g.add_option('--fancy', dest='fancy', action='store_true', default=True
 
436
        , help='Fancy or simple progress bar. (default: fancy)')
 
437
    parser.add_option_group(g)
 
438
 
 
439
    g = optparse.OptionGroup(parser, 'Test options', 'Options useful while testing process.')
 
440
    g.add_option('--test', action='store_true'
 
441
        , help='Run the self-tests and exit.')
 
442
    g.add_option('--dry-run', action='store_true'
 
443
        , help='Do the update, but don\'t copy the result to OUTDIR')
 
444
    g.add_option('--max-count', type='int', metavar='COUNT', default=None
 
445
        , help='At most, add COUNT patches.')
 
446
    g.add_option('--safe', action='store_false', dest='fast')
 
447
    g.add_option('--fast', action='store_true', default=False
 
448
        , help='By default the .bzr control directory will be copied, so that an error'
 
449
        ' does not modify the original. --fast allows the directory to be renamed instead.')
 
450
    parser.add_option_group(g)
 
451
 
 
452
    (opts, args) = parser.parse_args(args)
 
453
 
 
454
    if opts.test:
 
455
        print "Running tests"
 
456
        import doctest
 
457
        nfail, ntests = doctest.testmod(verbose=opts.verbose)
 
458
        if nfail > 0:
 
459
            return 1
 
460
        else:
 
461
            return 0
 
462
 
 
463
    if len(args) != 2:
 
464
        print 'Invalid number of arguments, try --help for more info'
 
465
        return 1
 
466
    else:
 
467
        try:
 
468
            output_dir = os.path.realpath(args[1])
 
469
            import_version(output_dir, pybaz.Version(args[0]),
 
470
                verbose=opts.verbose, fast=opts.fast,
 
471
                fancy=opts.fancy, dry_run=opts.dry_run,
 
472
                max_count=opts.max_count)
 
473
            return 0
 
474
        except UserError, e:
 
475
            print e
 
476
            return 1
 
477
        except KeyboardInterrupt:
 
478
            print "Aborted."
 
479
            return 1
 
480
 
 
481
 
 
482
if __name__ == '__main__':
 
483
    sys.exit(main(sys.argv[1:]))
 
484