From: Sverre Rabbelier <srabbelier@gmail.com>
To: Junio C Hamano <gitster@pobox.com>,
"Shawn O. Pearce" <spearce@spearce.org>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Git List <git@vger.kernel.org>,
<vcs-fast-import-devs@l
Cc: Sverre Rabbelier <srabbelier@gmail.com>
Subject: [PATCH v8 6/7] fast-import: allow for multiple --import-marks= arguments
Date: Fri, 4 Dec 2009 18:06:59 +0100 [thread overview]
Message-ID: <1259946420-8845-7-git-send-email-srabbelier@gmail.com> (raw)
In-Reply-To: <1259946420-8845-6-git-send-email-srabbelier@gmail.com>
The --import-marks= option may be specified multiple times on the
commandline and should result in all marks being read in. Only one
import-marks feature may be specified in the stream, which is
overriden by any --import-marks= commandline options.
If one wishes to specify import-marks files in addition to the one
specified in the stream, it is easy to repeat the stream option as a
--import-marks= commandline option.
Also verify this behavior with tests.
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
---
New in this series. Without this it is no longer possible to specify
multiple --import-marks= options on the commandline.
Documentation/git-fast-import.txt | 8 +++++++-
fast-import.c | 21 ++++++++++++++++-----
t/t9300-fast-import.sh | 22 ++++++++++++++++++++++
3 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index 2d5f533..752f85c 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -867,7 +867,8 @@ it does not.
The <feature> part of the command may be any string matching
^[a-zA-Z][a-zA-Z-]*$ and should be understood by fast-import.
-Feature work identical as their option counterparts.
+Feature work identical as their option counterparts with the
+exception of the import-marks feature, see below.
The following features are currently supported:
@@ -876,6 +877,11 @@ The following features are currently supported:
* export-marks
* force
+The import-marks behaves differently from when it is specified as
+commandline option in that only one "feature import-marks" is allowed
+per stream. Also, any --import-marks= specified on the commandline
+will override those from the stream (if any).
+
`option`
~~~~~~~~
Processes the specified option so that git fast-import behaves in a
diff --git a/fast-import.c b/fast-import.c
index ab099b6..4c3406e 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -322,6 +322,7 @@ static struct object_entry *object_table[1 << 16];
static struct mark_set *marks;
static const char *export_marks_file;
static const char *import_marks_file;
+static int import_marks_file_from_stream;
/* Our last blob */
static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
@@ -2469,9 +2470,19 @@ static void parse_progress(void)
skip_optional_lf();
}
-static void option_import_marks(const char *marks)
+static void option_import_marks(const char *marks, int from_stream)
{
+ if (import_marks_file) {
+ if (from_stream)
+ die("Only one import-marks command allowed per stream");
+
+ /* read previous mark file */
+ if(!import_marks_file_from_stream)
+ read_marks();
+ }
+
import_marks_file = xstrdup(marks);
+ import_marks_file_from_stream = from_stream;
}
static void option_date_format(const char *fmt)
@@ -2538,12 +2549,12 @@ static int parse_one_option(const char *option)
return 1;
}
-static int parse_one_feature(const char *feature)
+static int parse_one_feature(const char *feature, int from_stream)
{
if (!prefixcmp(feature, "date-format=")) {
option_date_format(feature + 12);
} else if (!prefixcmp(feature, "import-marks=")) {
- option_import_marks(feature + 13);
+ option_import_marks(feature + 13, from_stream);
} else if (!prefixcmp(feature, "export-marks=")) {
option_export_marks(feature + 13);
} else if (!prefixcmp(feature, "force")) {
@@ -2562,7 +2573,7 @@ static void parse_feature(void)
if (seen_data_command)
die("Got feature command '%s' after data command", feature);
- if (parse_one_feature(feature))
+ if (parse_one_feature(feature, 1))
return;
die("This version of fast-import does not support feature %s.", feature);
@@ -2618,7 +2629,7 @@ static void parse_argv(void)
if (parse_one_option(a + 2))
continue;
- if (parse_one_feature(a + 2))
+ if (parse_one_feature(a + 2, 0))
continue;
die("unknown option %s", a);
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 74dff11..ba92775 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -1286,6 +1286,15 @@ test_expect_success 'R: abort on receiving feature after data command' '
'
cat >input << EOF
+feature import-marks=git.marks
+feature import-marks=git2.marks
+EOF
+
+test_expect_success 'R: only one import-marks feature allowed per stream' '
+ test_must_fail git fast-import <input
+'
+
+cat >input << EOF
feature export-marks=git.marks
blob
mark :1
@@ -1324,6 +1333,19 @@ test_expect_success \
'cat input | git fast-import --import-marks=marks.out &&
test_cmp marks.out marks.new'
+
+cat >input <<EOF
+feature import-marks=nonexistant.marks
+feature export-marks=combined.marks
+EOF
+
+test_expect_success 'R: multiple --import-marks= should be honoured' '
+ head -n2 marks.out > one.marks &&
+ tail -n +3 marks.out > two.marks &&
+ git fast-import --import-marks=one.marks --import-marks=two.marks <input &&
+ test_cmp marks.out combined.marks
+'
+
cat >input << EOF
option git quiet
blob
--
1.6.5.3.164.g07b0c
next prev parent reply other threads:[~2009-12-04 17:07 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-04 17:06 [PATCH v8 0/7] fast-import: add new feature and option command Sverre Rabbelier
2009-12-04 17:06 ` [PATCH v8 1/7] fast-import: put option parsing code in separate functions Sverre Rabbelier
2009-12-04 17:06 ` [PATCH v8 2/7] fast-import: put marks reading in it's own function Sverre Rabbelier
2009-12-04 17:06 ` [PATCH v8 3/7] fast-import: add feature command Sverre Rabbelier
2009-12-04 17:06 ` [PATCH v8 4/7] fast-import: add option command Sverre Rabbelier
2009-12-04 17:06 ` [PATCH v8 5/7] fast-import: test the new " Sverre Rabbelier
2009-12-04 17:06 ` Sverre Rabbelier [this message]
2009-12-04 17:07 ` [PATCH v8 7/7] fast-import: add (non-)relative-marks feature Sverre Rabbelier
2009-12-04 18:09 ` Daniel Barkalow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1259946420-8845-7-git-send-email-srabbelier@gmail.com \
--to=srabbelier@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=spearce@spearce.org \
--cc=vcs-fast-import-devs@l \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).