From 65385ef7d457d740eddae2c4179064b8e13ac777 Mon Sep 17 00:00:00 2001 From: Michael Haggerty Date: Sat, 11 Feb 2012 07:20:57 +0100 Subject: fetch-pack.c: rename some parameters from "path" to "refname" The parameters denote reference names, which are no longer 1:1 with filesystem paths. Signed-off-by: Michael Haggerty Signed-off-by: Junio C Hamano --- builtin/fetch-pack.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'builtin/fetch-pack.c') diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 6207ecd298..9bd2096229 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -58,9 +58,9 @@ static void rev_list_push(struct commit *commit, int mark) } } -static int rev_list_insert_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data) +static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data) { - struct object *o = deref_tag(parse_object(sha1), path, 0); + struct object *o = deref_tag(parse_object(sha1), refname, 0); if (o && o->type == OBJ_COMMIT) rev_list_push((struct commit *)o, SEEN); @@ -68,9 +68,9 @@ static int rev_list_insert_ref(const char *path, const unsigned char *sha1, int return 0; } -static int clear_marks(const char *path, const unsigned char *sha1, int flag, void *cb_data) +static int clear_marks(const char *refname, const unsigned char *sha1, int flag, void *cb_data) { - struct object *o = deref_tag(parse_object(sha1), path, 0); + struct object *o = deref_tag(parse_object(sha1), refname, 0); if (o && o->type == OBJ_COMMIT) clear_commit_marks((struct commit *)o, @@ -493,7 +493,7 @@ done: static struct commit_list *complete; -static int mark_complete(const char *path, const unsigned char *sha1, int flag, void *cb_data) +static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data) { struct object *o = parse_object(sha1); -- cgit v1.2.3 From c41a802fe9593db67f458bde9f15f51fdf3f4f1a Mon Sep 17 00:00:00 2001 From: Michael Haggerty Date: Sat, 11 Feb 2012 07:20:58 +0100 Subject: fetch-pack.c: inline insert_alternate_refs() The logic of the (single) caller is clearer without encapsulating this one line in a function. Signed-off-by: Michael Haggerty Signed-off-by: Junio C Hamano --- builtin/fetch-pack.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'builtin/fetch-pack.c') diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 9bd2096229..dbe9acbc39 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -256,11 +256,6 @@ static void insert_one_alternate_ref(const struct ref *ref, void *unused) rev_list_insert_ref(NULL, ref->old_sha1, 0, NULL); } -static void insert_alternate_refs(void) -{ - for_each_alternate_ref(insert_one_alternate_ref, NULL); -} - #define INITIAL_FLUSH 16 #define PIPESAFE_FLUSH 32 #define LARGE_FLUSH 1024 @@ -295,7 +290,7 @@ static int find_common(int fd[2], unsigned char *result_sha1, marked = 1; for_each_ref(rev_list_insert_ref, NULL); - insert_alternate_refs(); + for_each_alternate_ref(insert_one_alternate_ref, NULL); fetching = 0; for ( ; refs ; refs = refs->next) { -- cgit v1.2.3 From f2576591320f6296d341fa14bd50ba6918ced864 Mon Sep 17 00:00:00 2001 From: Michael Haggerty Date: Sat, 11 Feb 2012 07:20:59 +0100 Subject: everything_local(): mark alternate refs as complete Objects in an alternate object database are already available to the local repository and therefore don't need to be fetched. So mark them as complete in everything_local(). This fixes a test in t5700. Signed-off-by: Michael Haggerty Signed-off-by: Junio C Hamano --- builtin/fetch-pack.c | 6 ++++++ t/t5700-clone-reference.sh | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'builtin/fetch-pack.c') diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index dbe9acbc39..0e8560f60f 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -581,6 +581,11 @@ static void filter_refs(struct ref **refs, int nr_match, char **match) *refs = newlist; } +static void mark_alternate_complete(const struct ref *ref, void *unused) +{ + mark_complete(NULL, ref->old_sha1, 0, NULL); +} + static int everything_local(struct ref **refs, int nr_match, char **match) { struct ref *ref; @@ -609,6 +614,7 @@ static int everything_local(struct ref **refs, int nr_match, char **match) if (!args.depth) { for_each_ref(mark_complete, NULL); + for_each_alternate_ref(mark_alternate_complete, NULL); if (cutoff) mark_recent_complete_commits(cutoff); } diff --git a/t/t5700-clone-reference.sh b/t/t5700-clone-reference.sh index bd7a1d7dbb..bbc4691bd7 100755 --- a/t/t5700-clone-reference.sh +++ b/t/t5700-clone-reference.sh @@ -167,7 +167,7 @@ test_expect_success 'prepare branched repository' ' rm -f "$U.K" -test_expect_failure 'fetch with incomplete alternates' ' +test_expect_success 'fetch with incomplete alternates' ' git init K && echo "$base_dir/A/.git/objects" >K/.git/objects/info/alternates && ( -- cgit v1.2.3 From 01fdc21f6e90f56fc5a49cbba751d9ead19b2f03 Mon Sep 17 00:00:00 2001 From: Clemens Buchacher Date: Mon, 13 Feb 2012 21:17:15 +0100 Subject: push/fetch/clone --no-progress suppresses progress output By default, progress output is disabled if stderr is not a terminal. The --progress option can be used to force progress output anyways. Conversely, --no-progress does not force progress output. In particular, if stderr is a terminal, progress output is enabled. This is unintuitive. Change --no-progress to force output off. Signed-off-by: Clemens Buchacher Signed-off-by: Junio C Hamano --- builtin/clone.c | 6 +++--- builtin/fetch-pack.c | 2 +- builtin/fetch.c | 4 ++-- builtin/push.c | 4 ++-- builtin/send-pack.c | 18 ++++++++++-------- t/t5523-push-upstream.sh | 3 ++- transport.c | 12 ++++++++---- 7 files changed, 28 insertions(+), 21 deletions(-) (limited to 'builtin/fetch-pack.c') diff --git a/builtin/clone.c b/builtin/clone.c index 86db954730..b9e882d302 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -45,7 +45,7 @@ static char *option_branch = NULL; static const char *real_git_dir; static char *option_upload_pack = "git-upload-pack"; static int option_verbosity; -static int option_progress; +static int option_progress = -1; static struct string_list option_config; static struct string_list option_reference; @@ -60,8 +60,8 @@ static int opt_parse_reference(const struct option *opt, const char *arg, int un static struct option builtin_clone_options[] = { OPT__VERBOSITY(&option_verbosity), - OPT_BOOLEAN(0, "progress", &option_progress, - "force progress reporting"), + OPT_BOOL(0, "progress", &option_progress, + "force progress reporting"), OPT_BOOLEAN('n', "no-checkout", &option_no_checkout, "don't create a checkout"), OPT_BOOLEAN(0, "bare", &option_bare, "create a bare repository"), diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 6207ecd298..a4d3e90a86 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -736,7 +736,7 @@ static int get_pack(int xd[2], char **pack_lockfile) } else { *av++ = "unpack-objects"; - if (args.quiet) + if (args.quiet || args.no_progress) *av++ = "-q"; } if (*hdr_arg) diff --git a/builtin/fetch.c b/builtin/fetch.c index 0481c169ca..8ec4eae3eb 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -30,7 +30,7 @@ enum { }; static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity; -static int progress, recurse_submodules = RECURSE_SUBMODULES_DEFAULT; +static int progress = -1, recurse_submodules = RECURSE_SUBMODULES_DEFAULT; static int tags = TAGS_DEFAULT; static const char *depth; static const char *upload_pack; @@ -78,7 +78,7 @@ static struct option builtin_fetch_options[] = { OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"), OPT_BOOLEAN('u', "update-head-ok", &update_head_ok, "allow updating of HEAD ref"), - OPT_BOOLEAN(0, "progress", &progress, "force progress reporting"), + OPT_BOOL(0, "progress", &progress, "force progress reporting"), OPT_STRING(0, "depth", &depth, "depth", "deepen history of shallow clone"), { OPTION_STRING, 0, "submodule-prefix", &submodule_prefix, "dir", diff --git a/builtin/push.c b/builtin/push.c index 35cce532f2..6c373cf28b 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -19,7 +19,7 @@ static int thin; static int deleterefs; static const char *receivepack; static int verbosity; -static int progress; +static int progress = -1; static const char **refspec; static int refspec_nr; @@ -260,7 +260,7 @@ int cmd_push(int argc, const char **argv, const char *prefix) OPT_STRING( 0 , "exec", &receivepack, "receive-pack", "receive pack program"), OPT_BIT('u', "set-upstream", &flags, "set upstream for git pull/status", TRANSPORT_PUSH_SET_UPSTREAM), - OPT_BOOLEAN(0, "progress", &progress, "force progress reporting"), + OPT_BOOL(0, "progress", &progress, "force progress reporting"), OPT_END() }; diff --git a/builtin/send-pack.c b/builtin/send-pack.c index 71f258ef6e..9df341c793 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -58,7 +58,7 @@ static int pack_objects(int fd, struct ref *refs, struct extra_have_objects *ext argv[i++] = "--thin"; if (args->use_ofs_delta) argv[i++] = "--delta-base-offset"; - if (args->quiet) + if (args->quiet || !args->progress) argv[i++] = "-q"; if (args->progress) argv[i++] = "--progress"; @@ -250,6 +250,7 @@ int send_pack(struct send_pack_args *args, int allow_deleting_refs = 0; int status_report = 0; int use_sideband = 0; + int quiet_supported = 0; unsigned cmds_sent = 0; int ret; struct async demux; @@ -263,8 +264,8 @@ int send_pack(struct send_pack_args *args, args->use_ofs_delta = 1; if (server_supports("side-band-64k")) use_sideband = 1; - if (!server_supports("quiet")) - args->quiet = 0; + if (server_supports("quiet")) + quiet_supported = 1; if (!remote_refs) { fprintf(stderr, "No refs in common and none specified; doing nothing.\n" @@ -302,17 +303,18 @@ int send_pack(struct send_pack_args *args, } else { char *old_hex = sha1_to_hex(ref->old_sha1); char *new_hex = sha1_to_hex(ref->new_sha1); + int quiet = quiet_supported && (args->quiet || !args->progress); if (!cmds_sent && (status_report || use_sideband || args->quiet)) { packet_buf_write(&req_buf, "%s %s %s%c%s%s%s", - old_hex, new_hex, ref->name, 0, - status_report ? " report-status" : "", - use_sideband ? " side-band-64k" : "", - args->quiet ? " quiet" : ""); + old_hex, new_hex, ref->name, 0, + status_report ? " report-status" : "", + use_sideband ? " side-band-64k" : "", + quiet ? " quiet" : ""); } else packet_buf_write(&req_buf, "%s %s %s", - old_hex, new_hex, ref->name); + old_hex, new_hex, ref->name); ref->status = status_report ? REF_STATUS_EXPECTING_REPORT : REF_STATUS_OK; diff --git a/t/t5523-push-upstream.sh b/t/t5523-push-upstream.sh index 9ee52cfc45..3683df13a6 100755 --- a/t/t5523-push-upstream.sh +++ b/t/t5523-push-upstream.sh @@ -101,10 +101,11 @@ test_expect_success TTY 'push -q suppresses progress' ' ! grep "Writing objects" err ' -test_expect_failure TTY 'push --no-progress suppresses progress' ' +test_expect_success TTY 'push --no-progress suppresses progress' ' ensure_fresh_upstream && test_terminal git push -u --no-progress upstream master >out 2>err && + ! grep "Unpacking objects" err && ! grep "Writing objects" err ' diff --git a/transport.c b/transport.c index cac0c065ff..401b8dd35c 100644 --- a/transport.c +++ b/transport.c @@ -993,11 +993,15 @@ void transport_set_verbosity(struct transport *transport, int verbosity, * Rules used to determine whether to report progress (processing aborts * when a rule is satisfied): * - * 1. Report progress, if force_progress is 1 (ie. --progress). - * 2. Don't report progress, if verbosity < 0 (ie. -q/--quiet ). - * 3. Report progress if isatty(2) is 1. + * . Report progress, if force_progress is 1 (ie. --progress). + * . Don't report progress, if force_progress is 0 (ie. --no-progress). + * . Don't report progress, if verbosity < 0 (ie. -q/--quiet ). + * . Report progress if isatty(2) is 1. **/ - transport->progress = force_progress || (verbosity >= 0 && isatty(2)); + if (force_progress >= 0) + transport->progress = !!force_progress; + else + transport->progress = verbosity >= 0 && isatty(2); } int transport_push(struct transport *transport, -- cgit v1.2.3