summaryrefslogtreecommitdiff
path: root/bin/fast-import-query
diff options
context:
space:
mode:
Diffstat (limited to 'bin/fast-import-query')
-rwxr-xr-xbin/fast-import-query77
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)