diff options
Diffstat (limited to 'bin/fast-import-query')
-rwxr-xr-x | bin/fast-import-query | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/bin/fast-import-query b/bin/fast-import-query new file mode 100755 index 0000000..6be68c4 --- /dev/null +++ b/bin/fast-import-query @@ -0,0 +1,77 @@ +#!/usr/bin/python +__doc__ = """Query a fast-import stream displaying selected commands. + +To specify standard input as the input stream, use a source name +of '-'. If the source name ends in '.gz', it is assumed to be +compressed in gzip format. + +To specify a commit to display, give its mark using the +--commit-mark option. The commit will be displayed with +file-commands included but with inline blobs hidden. + +To specify the commands to display, use the -C option one or +more times. To specify just some fields for a command, use the +syntax:: + + command=field1,... + +By default, the nominated fields for the nominated commands +are displayed tab separated. To see the information in +a name:value format, use verbose mode. + +Note: Binary fields (e.g. data for blobs) are masked out +so it is generally safe to view the output in a terminal. + +:Examples: + + Show the commit with mark 429:: + + fast-import-query xxx.fi -m429 + + Show all the fields of the reset and tag commands:: + + fast-import-query xxx.fi -Creset -Ctag + + Show the mark and merge fields of the commit commands:: + + fast-import-query xxx.fi -Ccommit=mark,merge +""" + +import optparse +import sys + +parser = optparse.OptionParser('fast-import-query [options] SOURCE?') + +parser.add_option('-v', '--verbose', dest="verbose", + action="store_true", help="Be verbose") +parser.add_option('-m', '--commit-mark', dest="commit_mark", + type=str, help="Mark of the commit to display.") +parser.add_option('-C', '--commands', type=str, + help="Display fields for these commands.") + +(opts, args) = parser.parse_args() + +if len(args) == 0: + source_path = "-" +elif len(args) == 1: + source_path = args[0] +else: + parser.print_usage() + +from fastimport.processors import query_processor +from fastimport.helpers import defines_to_dict, get_source_stream +from fastimport.errors import ParsingError +from fastimport import parser + +params = defines_to_dict(opts.commands) or {} +if opts.commit_mark: + params['commit-mark'] = opts.commit_mark + +stream = get_source_stream(source_path) +proc = query_processor.QueryProcessor(verbose=opts.verbose, params=params) +p = parser.ImportParser(stream, verbose=opts.verbose) +try: + sys.exit(proc.process(p.iter_commands)) +except ParsingError as e: + sys.stderr.write("%d: Parse error: %s\n" % (e.lineno, e)) + sys.exit(1) |