fast-import: add (non-)relative-marks feature
After specifying 'feature relative-marks' the paths specified with 'feature import-marks' and 'feature export-marks' are relative to an internal directory in the current repository. In git-fast-import this means that the paths are relative to the '.git/info/fast-import' directory. However, other importers may use a different location. Add 'feature non-relative-marks' to disable this behavior, this way it is possible to, for example, specify the import-marks location as relative, and the export-marks location as non-relative. Also add tests to verify this behavior. Cc: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
081751c882
commit
bc3c79aefc
@ -75,6 +75,20 @@ OPTIONS
|
|||||||
set of marks. If a mark is defined to different values,
|
set of marks. If a mark is defined to different values,
|
||||||
the last file wins.
|
the last file wins.
|
||||||
|
|
||||||
|
--relative-marks::
|
||||||
|
After specifying --relative-marks= the paths specified
|
||||||
|
with --import-marks= and --export-marks= are relative
|
||||||
|
to an internal directory in the current repository.
|
||||||
|
In git-fast-import this means that the paths are relative
|
||||||
|
to the .git/info/fast-import directory. However, other
|
||||||
|
importers may use a different location.
|
||||||
|
|
||||||
|
--no-relative-marks::
|
||||||
|
Negates a previous --relative-marks. Allows for combining
|
||||||
|
relative and non-relative marks by interweaving
|
||||||
|
--(no-)-relative-marks= with the --(import|export)-marks=
|
||||||
|
options.
|
||||||
|
|
||||||
--export-pack-edges=<file>::
|
--export-pack-edges=<file>::
|
||||||
After creating a packfile, print a line of data to
|
After creating a packfile, print a line of data to
|
||||||
<file> listing the filename of the packfile and the last
|
<file> listing the filename of the packfile and the last
|
||||||
@ -875,6 +889,8 @@ The following features are currently supported:
|
|||||||
* date-format
|
* date-format
|
||||||
* import-marks
|
* import-marks
|
||||||
* export-marks
|
* export-marks
|
||||||
|
* relative-marks
|
||||||
|
* no-relative-marks
|
||||||
* force
|
* force
|
||||||
|
|
||||||
The import-marks behaves differently from when it is specified as
|
The import-marks behaves differently from when it is specified as
|
||||||
|
@ -323,6 +323,7 @@ static struct mark_set *marks;
|
|||||||
static const char *export_marks_file;
|
static const char *export_marks_file;
|
||||||
static const char *import_marks_file;
|
static const char *import_marks_file;
|
||||||
static int import_marks_file_from_stream;
|
static int import_marks_file_from_stream;
|
||||||
|
static int relative_marks_paths;
|
||||||
|
|
||||||
/* Our last blob */
|
/* Our last blob */
|
||||||
static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
|
static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
|
||||||
@ -2470,6 +2471,16 @@ static void parse_progress(void)
|
|||||||
skip_optional_lf();
|
skip_optional_lf();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char* make_fast_import_path(const char *path)
|
||||||
|
{
|
||||||
|
struct strbuf abs_path = STRBUF_INIT;
|
||||||
|
|
||||||
|
if (!relative_marks_paths || is_absolute_path(path))
|
||||||
|
return xstrdup(path);
|
||||||
|
strbuf_addf(&abs_path, "%s/info/fast-import/%s", get_git_dir(), path);
|
||||||
|
return strbuf_detach(&abs_path, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void option_import_marks(const char *marks, int from_stream)
|
static void option_import_marks(const char *marks, int from_stream)
|
||||||
{
|
{
|
||||||
if (import_marks_file) {
|
if (import_marks_file) {
|
||||||
@ -2481,7 +2492,7 @@ static void option_import_marks(const char *marks, int from_stream)
|
|||||||
read_marks();
|
read_marks();
|
||||||
}
|
}
|
||||||
|
|
||||||
import_marks_file = xstrdup(marks);
|
import_marks_file = make_fast_import_path(marks);
|
||||||
import_marks_file_from_stream = from_stream;
|
import_marks_file_from_stream = from_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2516,7 +2527,7 @@ static void option_active_branches(const char *branches)
|
|||||||
|
|
||||||
static void option_export_marks(const char *marks)
|
static void option_export_marks(const char *marks)
|
||||||
{
|
{
|
||||||
export_marks_file = xstrdup(marks);
|
export_marks_file = make_fast_import_path(marks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void option_export_pack_edges(const char *edges)
|
static void option_export_pack_edges(const char *edges)
|
||||||
@ -2557,6 +2568,10 @@ static int parse_one_feature(const char *feature, int from_stream)
|
|||||||
option_import_marks(feature + 13, from_stream);
|
option_import_marks(feature + 13, from_stream);
|
||||||
} else if (!prefixcmp(feature, "export-marks=")) {
|
} else if (!prefixcmp(feature, "export-marks=")) {
|
||||||
option_export_marks(feature + 13);
|
option_export_marks(feature + 13);
|
||||||
|
} else if (!prefixcmp(feature, "relative-marks")) {
|
||||||
|
relative_marks_paths = 1;
|
||||||
|
} else if (!prefixcmp(feature, "no-relative-marks")) {
|
||||||
|
relative_marks_paths = 0;
|
||||||
} else if (!prefixcmp(feature, "force")) {
|
} else if (!prefixcmp(feature, "force")) {
|
||||||
force_update = 1;
|
force_update = 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1346,6 +1346,31 @@ test_expect_success 'R: multiple --import-marks= should be honoured' '
|
|||||||
test_cmp marks.out combined.marks
|
test_cmp marks.out combined.marks
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat >input <<EOF
|
||||||
|
feature relative-marks
|
||||||
|
feature import-marks=relative.in
|
||||||
|
feature export-marks=relative.out
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'R: feature relative-marks should be honoured' '
|
||||||
|
mkdir -p .git/info/fast-import/ &&
|
||||||
|
cp marks.new .git/info/fast-import/relative.in &&
|
||||||
|
git fast-import <input &&
|
||||||
|
test_cmp marks.new .git/info/fast-import/relative.out
|
||||||
|
'
|
||||||
|
|
||||||
|
cat >input <<EOF
|
||||||
|
feature relative-marks
|
||||||
|
feature import-marks=relative.in
|
||||||
|
feature no-relative-marks
|
||||||
|
feature export-marks=non-relative.out
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'R: feature no-relative-marks should be honoured' '
|
||||||
|
git fast-import <input &&
|
||||||
|
test_cmp marks.new non-relative.out
|
||||||
|
'
|
||||||
|
|
||||||
cat >input << EOF
|
cat >input << EOF
|
||||||
option git quiet
|
option git quiet
|
||||||
blob
|
blob
|
||||||
|
Loading…
x
Reference in New Issue
Block a user