/breezy/3.0

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/3.0

« back to all changes in this revision

Viewing changes to breezy/plugins/fastimport/cmds.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2018-05-07 12:03:11 UTC
  • mfrom: (6929.13.6 fast-import-cmds)
  • Revision ID: breezy.the.bot@gmail.com-20180507120311-x2v52qsrqj93zi52
Remove the fast-import-{query,info,filter} commands.

Merged from https://code.launchpad.net/~jelmer/brz/fast-import-cmds/+merge/342461

Show diffs side-by-side

added added

removed removed

Lines of Context:
324
324
        from fastimport import parser
325
325
        from fastimport.errors import ParsingError
326
326
        from ...errors import BzrCommandError
327
 
        from .processors import info_processor
 
327
        from fastimport.processors import info_processor
328
328
        stream = _get_source_stream(source)
329
329
        output = StringIO()
330
330
        try:
341
341
        return lines
342
342
 
343
343
 
344
 
class cmd_fast_import_filter(Command):
345
 
    """Filter a fast-import stream to include/exclude files & directories.
346
 
 
347
 
    This command is useful for splitting a subdirectory or bunch of
348
 
    files out from a project to create a new project complete with history
349
 
    for just those files. It can also be used to create a new project
350
 
    repository that removes all references to files that should not have
351
 
    been committed, e.g. security-related information (like passwords),
352
 
    commercially sensitive material, files with an incompatible license or
353
 
    large binary files like CD images.
354
 
 
355
 
    To specify standard input as the input stream, use a source name
356
 
    of '-'. If the source name ends in '.gz', it is assumed to be
357
 
    compressed in gzip format.
358
 
 
359
 
    :File/directory filtering:
360
 
 
361
 
     This is supported by the -i and -x options. Excludes take precedence
362
 
     over includes.
363
 
 
364
 
     When filtering out a subdirectory (or file), the new stream uses the
365
 
     subdirectory (or subdirectory containing the file) as the root. As
366
 
     fast-import doesn't know in advance whether a path is a file or
367
 
     directory in the stream, you need to specify a trailing '/' on
368
 
     directories passed to the `--includes option`. If multiple files or
369
 
     directories are given, the new root is the deepest common directory.
370
 
 
371
 
     Note: If a path has been renamed, take care to specify the *original*
372
 
     path name, not the final name that it ends up with.
373
 
 
374
 
    :User mapping:
375
 
 
376
 
     Some source repositories store just the user name while Bazaar
377
 
     prefers a full email address. You can adjust user-ids
378
 
     by using the --user-map option. The argument is a
379
 
     text file with lines in the format::
380
 
 
381
 
       old-id = new-id
382
 
 
383
 
     Blank lines and lines beginning with # are ignored.
384
 
     If old-id has the special value '@', then users without an
385
 
     email address will get one created by using the matching new-id
386
 
     as the domain, unless a more explicit address is given for them.
387
 
     For example, given the user-map of::
388
 
 
389
 
       @ = example.com
390
 
       bill = William Jones <bill@example.com>
391
 
 
392
 
     then user-ids are mapped as follows::
393
 
 
394
 
      maria => maria <maria@example.com>
395
 
      bill => William Jones <bill@example.com>
396
 
 
397
 
     .. note::
398
 
 
399
 
        User mapping is supported by both the fast-import and
400
 
        fast-import-filter commands.
401
 
 
402
 
    :History rewriting:
403
 
 
404
 
     By default fast-import-filter does quite aggressive history rewriting.
405
 
     Empty commits (or commits which had all their content filtered out) will
406
 
     be removed, and so are the references to commits not included in the stream.
407
 
 
408
 
     Flag --dont-squash-empty-commits reverses this behavior and makes it possible to
409
 
     use fast-import-filter on incremental streams.
410
 
 
411
 
    :Examples:
412
 
 
413
 
     Create a new project from a library (note the trailing / on the
414
 
     directory name of the library)::
415
 
 
416
 
       front-end | bzr fast-import-filter -i lib/xxx/ > xxx.fi
417
 
       bzr fast-import xxx.fi mylibrary.bzr
418
 
       (lib/xxx/foo is now foo)
419
 
 
420
 
     Create a new repository without a sensitive file::
421
 
 
422
 
       front-end | bzr fast-import-filter -x missile-codes.txt > clean.fi
423
 
       bzr fast-import clean.fi clean.bzr
424
 
    """
425
 
    hidden = False
426
 
    _see_also = ['fast-import']
427
 
    takes_args = ['source?']
428
 
    takes_options = ['verbose',
429
 
                    ListOption('include_paths', short_name='i', type=text_type,
430
 
                        help="Only include commits affecting these paths."
431
 
                             " Directories should have a trailing /."
432
 
                        ),
433
 
                    ListOption('exclude_paths', short_name='x', type=text_type,
434
 
                        help="Exclude these paths from commits."
435
 
                        ),
436
 
                    Option('user-map', type=text_type,
437
 
                        help="Path to file containing a map of user-ids.",
438
 
                        ),
439
 
                    Option('dont-squash-empty-commits',
440
 
                        help="Preserve all commits and links between them"
441
 
                        ),
442
 
                     ]
443
 
    encoding_type = 'exact'
444
 
    def run(self, source=None, verbose=False, include_paths=None,
445
 
        exclude_paths=None, user_map=None, dont_squash_empty_commits=False):
446
 
        from ...errors import BzrCommandError
447
 
        load_fastimport()
448
 
        from fastimport.processors import filter_processor
449
 
        params = {
450
 
            'include_paths': include_paths,
451
 
            'exclude_paths': exclude_paths,
452
 
            }
453
 
        if ('squash_empty_commits' in
454
 
                filter_processor.FilterProcessor.known_params):
455
 
            params['squash_empty_commits'] = (not dont_squash_empty_commits)
456
 
        else:
457
 
            if dont_squash_empty_commits:
458
 
                raise BzrCommandError("installed python-fastimport does not "
459
 
                    "support not squashing empty commits. Please install "
460
 
                    " a newer python-fastimport to use "
461
 
                    "--dont-squash-empty-commits")
462
 
 
463
 
        from fastimport.errors import ParsingError
464
 
        from fastimport import parser
465
 
        stream = _get_source_stream(source)
466
 
        user_mapper = _get_user_mapper(user_map)
467
 
        proc = filter_processor.FilterProcessor(params=params, verbose=verbose)
468
 
        p = parser.ImportParser(stream, verbose=verbose, user_mapper=user_mapper)
469
 
        try:
470
 
            return proc.process(p.iter_commands)
471
 
        except ParsingError as e:
472
 
            raise BzrCommandError("%d: Parse error: %s" % (e.lineno, e))
473
 
 
474
 
 
475
 
class cmd_fast_import_info(Command):
476
 
    """Output information about a fast-import stream.
477
 
 
478
 
    This command reads a fast-import stream and outputs
479
 
    statistics and interesting properties about what it finds.
480
 
    When run in verbose mode, the information is output as a
481
 
    configuration file that can be passed to fast-import to
482
 
    assist it in intelligently caching objects.
483
 
 
484
 
    To specify standard input as the input stream, use a source name
485
 
    of '-'. If the source name ends in '.gz', it is assumed to be
486
 
    compressed in gzip format.
487
 
 
488
 
    :Examples:
489
 
 
490
 
     Display statistics about the import stream produced by front-end::
491
 
 
492
 
      front-end | bzr fast-import-info -
493
 
 
494
 
     Create a hints file for running fast-import on a large repository::
495
 
 
496
 
       front-end | bzr fast-import-info -v - > front-end.cfg
497
 
    """
498
 
    hidden = False
499
 
    _see_also = ['fast-import']
500
 
    takes_args = ['source']
501
 
    takes_options = ['verbose']
502
 
    def run(self, source, verbose=False):
503
 
        load_fastimport()
504
 
        from .processors import info_processor
505
 
        return _run(source, info_processor.InfoProcessor, verbose=verbose)
506
 
 
507
 
 
508
 
class cmd_fast_import_query(Command):
509
 
    """Query a fast-import stream displaying selected commands.
510
 
 
511
 
    To specify standard input as the input stream, use a source name
512
 
    of '-'. If the source name ends in '.gz', it is assumed to be
513
 
    compressed in gzip format.
514
 
 
515
 
    To specify a commit to display, give its mark using the
516
 
    --commit-mark option. The commit will be displayed with
517
 
    file-commands included but with inline blobs hidden.
518
 
 
519
 
    To specify the commands to display, use the -C option one or
520
 
    more times. To specify just some fields for a command, use the
521
 
    syntax::
522
 
 
523
 
      command=field1,...
524
 
 
525
 
    By default, the nominated fields for the nominated commands
526
 
    are displayed tab separated. To see the information in
527
 
    a name:value format, use verbose mode.
528
 
 
529
 
    Note: Binary fields (e.g. data for blobs) are masked out
530
 
    so it is generally safe to view the output in a terminal.
531
 
 
532
 
    :Examples:
533
 
 
534
 
     Show the commit with mark 429::
535
 
 
536
 
      bzr fast-import-query xxx.fi -m429
537
 
 
538
 
     Show all the fields of the reset and tag commands::
539
 
 
540
 
      bzr fast-import-query xxx.fi -Creset -Ctag
541
 
 
542
 
     Show the mark and merge fields of the commit commands::
543
 
 
544
 
      bzr fast-import-query xxx.fi -Ccommit=mark,merge
545
 
    """
546
 
    hidden = True
547
 
    _see_also = ['fast-import', 'fast-import-filter']
548
 
    takes_args = ['source']
549
 
    takes_options = ['verbose',
550
 
                    Option('commit-mark', short_name='m', type=text_type,
551
 
                        help="Mark of the commit to display."
552
 
                        ),
553
 
                    ListOption('commands', short_name='C', type=text_type,
554
 
                        help="Display fields for these commands."
555
 
                        ),
556
 
                     ]
557
 
    def run(self, source, verbose=False, commands=None, commit_mark=None):
558
 
        load_fastimport()
559
 
        from fastimport.processors import query_processor
560
 
        from . import helpers
561
 
        params = helpers.defines_to_dict(commands) or {}
562
 
        if commit_mark:
563
 
            params['commit-mark'] = commit_mark
564
 
        return _run(source, query_processor.QueryProcessor, params=params,
565
 
            verbose=verbose)
566
 
 
567
 
 
568
344
class cmd_fast_export(Command):
569
345
    """Generate a fast-import stream from a Bazaar branch.
570
346