summaryrefslogtreecommitdiff
path: root/modules/git-fast-import/gen-parser.mk
diff options
context:
space:
mode:
Diffstat (limited to 'modules/git-fast-import/gen-parser.mk')
-rw-r--r--modules/git-fast-import/gen-parser.mk154
1 files changed, 154 insertions, 0 deletions
diff --git a/modules/git-fast-import/gen-parser.mk b/modules/git-fast-import/gen-parser.mk
new file mode 100644
index 0000000..7837e5c
--- /dev/null
+++ b/modules/git-fast-import/gen-parser.mk
@@ -0,0 +1,154 @@
+# (See Documentation/git-fast-import.txt for maintained documentation.)
+# Format of STDIN stream:
+#
+# stream ::= cmd*;
+#
+# cmd ::= new_blob
+# | new_commit
+# | new_tag
+# | reset_branch
+# | checkpoint
+# | progress
+# ;
+#
+# new_blob ::= 'blob' lf
+# mark?
+# file_content;
+# file_content ::= data;
+#
+# new_commit ::= 'commit' sp ref_str lf
+# mark?
+# ('author' (sp name)? sp '<' email '>' sp when lf)?
+# 'committer' (sp name)? sp '<' email '>' sp when lf
+# commit_msg
+# ('from' sp commit-ish lf)?
+# ('merge' sp commit-ish lf)*
+# (file_change | ls)*
+# lf?;
+# commit_msg ::= data;
+#
+# ls ::= 'ls' sp '"' quoted(path) '"' lf;
+#
+# file_change ::= file_clr
+# | file_del
+# | file_rnm
+# | file_cpy
+# | file_obm
+# | file_inm;
+# file_clr ::= 'deleteall' lf;
+# file_del ::= 'D' sp path_str lf;
+# file_rnm ::= 'R' sp path_str sp path_str lf;
+# file_cpy ::= 'C' sp path_str sp path_str lf;
+# file_obm ::= 'M' sp mode sp (hexsha1 | idnum) sp path_str lf;
+# file_inm ::= 'M' sp mode sp 'inline' sp path_str lf
+# data;
+# note_obm ::= 'N' sp (hexsha1 | idnum) sp commit-ish lf;
+# note_inm ::= 'N' sp 'inline' sp commit-ish lf
+# data;
+#
+# new_tag ::= 'tag' sp tag_str lf
+# 'from' sp commit-ish lf
+# ('tagger' (sp name)? sp '<' email '>' sp when lf)?
+# tag_msg;
+# tag_msg ::= data;
+#
+# reset_branch ::= 'reset' sp ref_str lf
+# ('from' sp commit-ish lf)?
+# lf?;
+#
+# checkpoint ::= 'checkpoint' lf
+# lf?;
+#
+# progress ::= 'progress' sp not_lf* lf
+# lf?;
+#
+# # note: the first idnum in a stream should be 1 and subsequent
+# # idnums should not have gaps between values as this will cause
+# # the stream parser to reserve space for the gapped values. An
+# # idnum can be updated in the future to a new object by issuing
+# # a new mark directive with the old idnum.
+# #
+# mark ::= 'mark' sp idnum lf;
+# data ::= (delimited_data | exact_data)
+# lf?;
+#
+# # note: delim may be any string but must not contain lf.
+# # data_line may contain any data but must not be exactly
+# # delim.
+# delimited_data ::= 'data' sp '<<' delim lf
+# (data_line lf)*
+# delim lf;
+#
+# # note: declen indicates the length of binary_data in bytes.
+# # declen does not include the lf preceding the binary data.
+# #
+# exact_data ::= 'data' sp declen lf
+# binary_data;
+#
+# # note: quoted strings are C-style quoting supporting \c for
+# # common escapes of 'c' (e..g \n, \t, \\, \") or \nnn where nnn
+# # is the signed byte value in octal. Note that the only
+# # characters which must actually be escaped to protect the
+# # stream formatting is: \, " and LF. Otherwise these values
+# # are UTF8.
+# #
+# commit-ish ::= (ref_str | hexsha1 | sha1exp_str | idnum);
+# ref_str ::= ref;
+# sha1exp_str ::= sha1exp;
+# tag_str ::= tag;
+# path_str ::= path | '"' quoted(path) '"' ;
+# mode ::= '100644' | '644'
+# | '100755' | '755'
+# | '120000'
+# ;
+#
+# declen ::= # unsigned 32 bit value, ascii base10 notation;
+# bigint ::= # unsigned integer value, ascii base10 notation;
+# binary_data ::= # file content, not interpreted;
+#
+# when ::= raw_when | rfc2822_when;
+# raw_when ::= ts sp tz;
+# rfc2822_when ::= # Valid RFC 2822 date and time;
+#
+# sp ::= # ASCII space character;
+# lf ::= # ASCII newline (LF) character;
+#
+# # note: a colon (':') must precede the numerical value assigned to
+# # an idnum. This is to distinguish it from a ref or tag name as
+# # GIT does not permit ':' in ref or tag strings.
+# #
+# idnum ::= ':' bigint;
+# path ::= # GIT style file path, e.g. "a/b/c";
+# ref ::= # GIT ref name, e.g. "refs/heads/MOZ_GECKO_EXPERIMENT";
+# tag ::= # GIT tag name, e.g. "FIREFOX_1_5";
+# sha1exp ::= # Any valid GIT SHA1 expression;
+# hexsha1 ::= # SHA1 in hexadecimal format;
+#
+# # note: name and email are UTF8 strings, however name must not
+# # contain '<' or lf and email must not contain any of the
+# # following: '<', '>', lf.
+# #
+# name ::= # valid GIT author/committer name;
+# email ::= # valid GIT author/committer email;
+# ts ::= # time since the epoch in seconds, ascii base10 notation;
+# tz ::= # GIT style timezone;
+#
+# # note: comments, ls and cat requests may appear anywhere
+# # in the input, except within a data command. Any form
+# # of the data command always escapes the related input
+# # from comment processing.
+# #
+# # In case it is not clear, the '#' that starts the comment
+# # must be the first character on that line (an lf
+# # preceded it).
+# #
+#
+# cat_blob ::= 'cat-blob' sp (hexsha1 | idnum) lf;
+cat_blob = cat-blob${sp}(${hexsha1}|${idnum})${lf}
+# ls_tree ::= 'ls' sp (hexsha1 | idnum) sp path_str lf;
+ls_tree = ls${sp}(${hexsha1}|${idnum})${sp}${path_str}${lf}
+#
+# comment ::= '#' not_lf* lf;
+comment = \#$(not_lf)
+# not_lf ::= # Any byte that is not ASCII newline (LF);
+not_lf = [^\n]