From: Johan Herland <johan@xxxxxxxxxxx> The 'marks' capability is reported by the remote helper if it requires the fast-import marks database to loaded/saved by any git-fast-import process that is provided by the transport machinery. The feature is advertised along with exactly one argument: the location of the file containing the marks database. Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> Signed-off-by: Daniel Barkalow <barkalow@xxxxxxxxxxxx> --- Documentation/git-remote-helpers.txt | 8 ++++++++ transport-helper.c | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/Documentation/git-remote-helpers.txt b/Documentation/git-remote-helpers.txt index 2c5130f..9a3c5bc 100644 --- a/Documentation/git-remote-helpers.txt +++ b/Documentation/git-remote-helpers.txt @@ -67,6 +67,14 @@ CAPABILITIES 'import':: This helper supports the 'import' command. +'marks' filename:: + Helper requires the marks from a git-fast-import run to be + loaded from, and saved to, the given filename. When this + "feature" is advertised, each git-fast-import run must load + and save the internal marks database (see the --import-marks + and --export-marks option to git-fast-import for more details) + located at the given filename. + REF LIST ATTRIBUTES ------------------- diff --git a/transport-helper.c b/transport-helper.c index 8134ff4..cc99368 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -10,6 +10,8 @@ struct helper_data { const char *name; struct child_process *helper; + + char *marks_filename; unsigned fetch : 1; unsigned import : 1; }; @@ -53,6 +55,8 @@ static struct child_process *get_helper(struct transport *transport) data->fetch = 1; if (!strcmp(buf.buf, "import")) data->import = 1; + if (!prefixcmp(buf.buf, "marks ")) + data->marks_filename = xstrdup(buf.buf + 6); } return data->helper; } @@ -105,6 +109,15 @@ static int get_importer(struct transport *transport, struct child_process *fasti fastimport->argv = xcalloc(5, sizeof(*fastimport->argv)); fastimport->argv[0] = "fast-import"; fastimport->argv[1] = "--quiet"; + if (data->marks_filename) { + struct strbuf buf = STRBUF_INIT; + strbuf_addf(&buf, "--export-marks=%s", data->marks_filename); + fastimport->argv[2] = strbuf_detach(&buf, 0); + if (!access(data->marks_filename, R_OK)) { + strbuf_addf(&buf, "--import-marks=%s", data->marks_filename); + fastimport->argv[3] = strbuf_detach(&buf, 0); + } + } fastimport->git_cmd = 1; return start_command(fastimport); @@ -133,6 +146,8 @@ static int fetch_with_import(struct transport *transport, } disconnect_helper(transport); finish_command(&fastimport); + free((char *) fastimport.argv[2]); + free((char *) fastimport.argv[3]); for (i = 0; i < nr_heads; i++) { posn = to_fetch[i]; -- 1.6.4.183.g77eb9.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html