* fully deepening a shallow clone @ 2010-08-17 0:49 Joey Hess 2010-08-18 9:36 ` Nguyen Thai Ngoc Duy 0 siblings, 1 reply; 16+ messages in thread From: Joey Hess @ 2010-08-17 0:49 UTC (permalink / raw) To: git [-- Attachment #1: Type: text/plain, Size: 480 bytes --] git-pull(1): --depth=<depth> Deepen the history of a shallow repository created by git clone with --depth=<depth> option (see git-clone(1)) by the specified number of commits. Well, what if I want to deepen an existing shallow clone to include the full history? In practice, something like --depth=100000000 is going to work, but in theory, that will eventually fail some day when there are enough commits. :) -- see shy jo [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 828 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: fully deepening a shallow clone 2010-08-17 0:49 fully deepening a shallow clone Joey Hess @ 2010-08-18 9:36 ` Nguyen Thai Ngoc Duy 2010-08-18 12:54 ` Daniel Johnson 2010-08-18 15:48 ` fully deepening a shallow clone Joey Hess 0 siblings, 2 replies; 16+ messages in thread From: Nguyen Thai Ngoc Duy @ 2010-08-18 9:36 UTC (permalink / raw) To: Joey Hess; +Cc: git On Tue, Aug 17, 2010 at 10:49 AM, Joey Hess <joey@kitenet.net> wrote: > git-pull(1): > --depth=<depth> > Deepen the history of a shallow repository created by git clone > with --depth=<depth> option (see git-clone(1)) by the specified > number of commits. > > Well, what if I want to deepen an existing shallow clone to include > the full history? In practice, something like --depth=100000000 is going > to work, but in theory, that will eventually fail some day when there are > enough commits. :) I have always thought --depth=0 will make full repo again. Have you tried that? -- Duy ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: fully deepening a shallow clone 2010-08-18 9:36 ` Nguyen Thai Ngoc Duy @ 2010-08-18 12:54 ` Daniel Johnson 2010-08-19 10:40 ` [PATCH 1/3] clone: do not accept --depth on local clones Nguyễn Thái Ngọc Duy ` (2 more replies) 2010-08-18 15:48 ` fully deepening a shallow clone Joey Hess 1 sibling, 3 replies; 16+ messages in thread From: Daniel Johnson @ 2010-08-18 12:54 UTC (permalink / raw) To: Nguyen Thai Ngoc Duy; +Cc: Joey Hess, git [-- Attachment #1: Type: Text/Plain, Size: 1018 bytes --] On Wednesday 18 August 2010 05:36:08 Nguyen Thai Ngoc Duy wrote: > On Tue, Aug 17, 2010 at 10:49 AM, Joey Hess <joey@kitenet.net> wrote: > > git-pull(1): > > --depth=<depth> > > Deepen the history of a shallow repository created by git clone > > with --depth=<depth> option (see git-clone(1)) by the specified > > number of commits. > > > > Well, what if I want to deepen an existing shallow clone to include > > the full history? In practice, something like --depth=100000000 is going > > to work, but in theory, that will eventually fail some day when there are > > enough commits. :) > > I have always thought --depth=0 will make full repo again. Have you tried > that? I tried it myself. --depth=0 is the same as leaving the depth argument off entirely. If you are already working in a shallow clone fetch or pull without arguments won't deepen it at all, only pull in new commits. I haven't been able to figure out a good way to solve this yet though. [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/3] clone: do not accept --depth on local clones 2010-08-18 12:54 ` Daniel Johnson @ 2010-08-19 10:40 ` Nguyễn Thái Ngọc Duy 2010-08-19 14:31 ` Daniel Johnson 2010-08-19 20:49 ` Mikael Magnusson 2010-08-19 10:40 ` [PATCH 2/3] fetch-pack: use args.shallow to detect shallow clone instead of args.depth Nguyễn Thái Ngọc Duy 2010-08-19 10:40 ` [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again Nguyễn Thái Ngọc Duy 2 siblings, 2 replies; 16+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2010-08-19 10:40 UTC (permalink / raw) To: git, computerdruid, joey; +Cc: Nguyễn Thái Ngọc Duy Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- builtin/clone.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/builtin/clone.c b/builtin/clone.c index efb1e6f..215c432 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -361,7 +361,7 @@ static void write_remote_refs(const struct ref *local_refs) int cmd_clone(int argc, const char **argv, const char *prefix) { - int is_bundle = 0; + int is_bundle = 0, is_local; struct stat buf; const char *repo_name, *repo, *work_tree, *git_dir; char *path, *dir; @@ -414,6 +414,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) repo = xstrdup(make_absolute_path(repo_name)); else repo = repo_name; + is_local = path && !is_bundle; + if (is_local && option_depth) + die("local clone with --depth does not make sense"); if (argc == 2) dir = xstrdup(argv[1]); @@ -514,7 +517,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) strbuf_reset(&value); - if (path && !is_bundle) { + if (is_local) { refs = clone_local(path, git_dir); mapped_refs = wanted_peer_refs(refs, refspec); } else { -- 1.7.1.rc1.69.g24c2f7 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/3] clone: do not accept --depth on local clones 2010-08-19 10:40 ` [PATCH 1/3] clone: do not accept --depth on local clones Nguyễn Thái Ngọc Duy @ 2010-08-19 14:31 ` Daniel Johnson 2010-08-19 22:15 ` Nguyen Thai Ngoc Duy 2010-08-19 20:49 ` Mikael Magnusson 1 sibling, 1 reply; 16+ messages in thread From: Daniel Johnson @ 2010-08-19 14:31 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy; +Cc: git, joey [-- Attachment #1: Type: Text/Plain, Size: 436 bytes --] On Thursday 19 August 2010 06:40:35 you wrote: > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> > --- > builtin/clone.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) Can you make it a little clearer what the rationale is for this change? Why wouldn't you be able to do a limited-depth local clone? Seems like this would break some tests, and even if not, would prevent the writing of them. [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/3] clone: do not accept --depth on local clones 2010-08-19 14:31 ` Daniel Johnson @ 2010-08-19 22:15 ` Nguyen Thai Ngoc Duy 0 siblings, 0 replies; 16+ messages in thread From: Nguyen Thai Ngoc Duy @ 2010-08-19 22:15 UTC (permalink / raw) To: Daniel Johnson, mikachu; +Cc: git, joey On Fri, Aug 20, 2010 at 12:31 AM, Daniel Johnson <computerdruid@gmail.com> wrote: > On Thursday 19 August 2010 06:40:35 you wrote: >> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> >> --- >> builtin/clone.c | 7 +++++-- >> 1 files changed, 5 insertions(+), 2 deletions(-) > Can you make it a little clearer what the rationale is for this change? Why > wouldn't you be able to do a limited-depth local clone? Seems like this > would > break some tests, and even if not, would prevent the writing of them. It's been like this ever since and it puzzled me, "why 'git clone --depth=2 ~/foo' did not work? What did I do?" Will do as Mikael suggested. -- Duy ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/3] clone: do not accept --depth on local clones 2010-08-19 10:40 ` [PATCH 1/3] clone: do not accept --depth on local clones Nguyễn Thái Ngọc Duy 2010-08-19 14:31 ` Daniel Johnson @ 2010-08-19 20:49 ` Mikael Magnusson 1 sibling, 0 replies; 16+ messages in thread From: Mikael Magnusson @ 2010-08-19 20:49 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy; +Cc: git, computerdruid, joey 2010/8/19 Nguyễn Thái Ngọc Duy <pclouds@gmail.com>: > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> > --- > builtin/clone.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/builtin/clone.c b/builtin/clone.c > index efb1e6f..215c432 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -414,6 +414,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > repo = xstrdup(make_absolute_path(repo_name)); > else > repo = repo_name; > + is_local = path && !is_bundle; > + if (is_local && option_depth) > + die("local clone with --depth does not make sense"); > > if (argc == 2) > dir = xstrdup(argv[1]); Wouldn't it be more helpful to also say "Use the file:///blabla syntax instead" or just automatically fall back to that protocol when --depth is used? -- Mikael Magnusson ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 2/3] fetch-pack: use args.shallow to detect shallow clone instead of args.depth 2010-08-18 12:54 ` Daniel Johnson 2010-08-19 10:40 ` [PATCH 1/3] clone: do not accept --depth on local clones Nguyễn Thái Ngọc Duy @ 2010-08-19 10:40 ` Nguyễn Thái Ngọc Duy 2010-08-19 10:40 ` [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again Nguyễn Thái Ngọc Duy 2 siblings, 0 replies; 16+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2010-08-19 10:40 UTC (permalink / raw) To: git, computerdruid, joey; +Cc: Nguyễn Thái Ngọc Duy Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- builtin/fetch-pack.c | 17 ++++++++++------- fetch-pack.h | 3 ++- transport.c | 9 +++++++-- transport.h | 1 + 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index dbd8b7b..45d1824 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -167,7 +167,7 @@ enum ack_type { static void consume_shallow_list(int fd) { - if (args.stateless_rpc && args.depth > 0) { + if (args.stateless_rpc && args.shallow) { /* If we sent a depth we will get back "duplicate" * shallow and unshallow commands every time there * is a block of have lines exchanged. @@ -283,12 +283,12 @@ static int find_common(int fd[2], unsigned char *result_sha1, if (is_repository_shallow()) write_shallow_commits(&req_buf, 1); - if (args.depth > 0) + if (args.shallow) packet_buf_write(&req_buf, "deepen %d", args.depth); packet_buf_flush(&req_buf); state_len = req_buf.len; - if (args.depth > 0) { + if (args.shallow) { char line[1024]; unsigned char sha1[20]; @@ -476,7 +476,7 @@ static void filter_refs(struct ref **refs, int nr_match, char **match) check_ref_format(ref->name + 5)) ; /* trash */ else if (args.fetch_all && - (!args.depth || prefixcmp(ref->name, "refs/tags/") )) { + (!args.shallow || prefixcmp(ref->name, "refs/tags/") )) { *newtail = ref; ref->next = NULL; newtail = &ref->next; @@ -534,7 +534,7 @@ static int everything_local(struct ref **refs, int nr_match, char **match) } } - if (!args.depth) { + if (!args.shallow) { for_each_ref(mark_complete, NULL); if (cutoff) mark_recent_complete_commits(cutoff); @@ -845,6 +845,9 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) } if (!prefixcmp(arg, "--depth=")) { args.depth = strtol(arg + 8, NULL, 0); + if (args.depth <= 0) + die("Invalid depth %d", args.depth); + args.shallow = 1; continue; } if (!strcmp("--no-progress", arg)) { @@ -928,7 +931,7 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args, fetch_pack_setup(); if (&args != my_args) memcpy(&args, my_args, sizeof(args)); - if (args.depth > 0) { + if (args.shallow) { if (stat(git_path("shallow"), &st)) st.st_mtime = 0; } @@ -941,7 +944,7 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args, } ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile); - if (args.depth > 0) { + if (args.shallow) { struct cache_time mtime; struct strbuf sb = STRBUF_INIT; char *shallow = git_path("shallow"); diff --git a/fetch-pack.h b/fetch-pack.h index fbe85ac..abc1ab7 100644 --- a/fetch-pack.h +++ b/fetch-pack.h @@ -14,7 +14,8 @@ struct fetch_pack_args verbose:1, no_progress:1, include_tag:1, - stateless_rpc:1; + stateless_rpc:1, + shallow:1; }; struct ref *fetch_pack(struct fetch_pack_args *args, diff --git a/transport.c b/transport.c index 4dba6f8..cf7030b 100644 --- a/transport.c +++ b/transport.c @@ -470,10 +470,14 @@ static int set_git_option(struct git_transport_options *opts, opts->keep = !!value; return 0; } else if (!strcmp(name, TRANS_OPT_DEPTH)) { - if (!value) + if (!value) { opts->depth = 0; - else + opts->shallow = 0; + } + else { opts->depth = atoi(value); + opts->shallow = 1; + } return 0; } return 1; @@ -529,6 +533,7 @@ static int fetch_refs_via_pack(struct transport *transport, args.quiet = (transport->verbose < 0); args.no_progress = !transport->progress; args.depth = data->options.depth; + args.shallow = data->options.shallow; for (i = 0; i < nr_heads; i++) origh[i] = heads[i] = xstrdup(to_fetch[i]->name); diff --git a/transport.h b/transport.h index c59d973..e6ac4b1 100644 --- a/transport.h +++ b/transport.h @@ -8,6 +8,7 @@ struct git_transport_options { unsigned thin : 1; unsigned keep : 1; unsigned followtags : 1; + unsigned shallow : 1; int depth; const char *uploadpack; const char *receivepack; -- 1.7.1.rc1.69.g24c2f7 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again 2010-08-18 12:54 ` Daniel Johnson 2010-08-19 10:40 ` [PATCH 1/3] clone: do not accept --depth on local clones Nguyễn Thái Ngọc Duy 2010-08-19 10:40 ` [PATCH 2/3] fetch-pack: use args.shallow to detect shallow clone instead of args.depth Nguyễn Thái Ngọc Duy @ 2010-08-19 10:40 ` Nguyễn Thái Ngọc Duy 2010-08-19 21:22 ` Jakub Narebski 2 siblings, 1 reply; 16+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2010-08-19 10:40 UTC (permalink / raw) To: git, computerdruid, joey; +Cc: Nguyễn Thái Ngọc Duy Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- The funny thing is, even with --depth=0, I still have two commit grafts in $GIT_DIR/shallow, which are grafts of tags. I think there is a bug somewhere.. builtin/fetch-pack.c | 2 +- shallow.c | 2 +- upload-pack.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 45d1824..7d7af2e 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -845,7 +845,7 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) } if (!prefixcmp(arg, "--depth=")) { args.depth = strtol(arg + 8, NULL, 0); - if (args.depth <= 0) + if (args.depth < 0) die("Invalid depth %d", args.depth); args.shallow = 1; continue; diff --git a/shallow.c b/shallow.c index 4d90eda..eab97c6 100644 --- a/shallow.c +++ b/shallow.c @@ -85,7 +85,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, continue; *pointer = cur_depth; } - if (cur_depth < depth) { + if (!depth || cur_depth < depth) { if (p->next) add_object_array(&p->item->object, NULL, &stack); diff --git a/upload-pack.c b/upload-pack.c index fc79dde..7b004b9 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -484,7 +484,7 @@ static void receive_needs(void) { struct object_array shallows = {0, 0, NULL}; static char line[1000]; - int len, depth = 0; + int len, depth = -1; shallow_nr = 0; if (debug_fd) @@ -514,7 +514,7 @@ static void receive_needs(void) if (!prefixcmp(line, "deepen ")) { char *end; depth = strtol(line + 7, &end, 0); - if (end == line + 7 || depth <= 0) + if (end == line + 7 || depth < 0) die("Invalid deepen: %s", line); continue; } @@ -562,9 +562,9 @@ static void receive_needs(void) if (!use_sideband && daemon_mode) no_progress = 1; - if (depth == 0 && shallows.nr == 0) + if (depth == -1 && shallows.nr == 0) return; - if (depth > 0) { + if (depth >= 0) { struct commit_list *result, *backup; int i; backup = result = get_shallow_commits(&want_obj, depth, -- 1.7.1.rc1.69.g24c2f7 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again 2010-08-19 10:40 ` [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again Nguyễn Thái Ngọc Duy @ 2010-08-19 21:22 ` Jakub Narebski 2010-08-19 22:11 ` Nguyen Thai Ngoc Duy 0 siblings, 1 reply; 16+ messages in thread From: Jakub Narebski @ 2010-08-19 21:22 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy; +Cc: git, computerdruid, joey Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes: > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> > --- > The funny thing is, even with --depth=0, I still have two commit grafts > in $GIT_DIR/shallow, which are grafts of tags. I think there is a bug somewhere.. > > builtin/fetch-pack.c | 2 +- > shallow.c | 2 +- > upload-pack.c | 8 ++++---- > 3 files changed, 6 insertions(+), 6 deletions(-) > Fist, it lacks documentation update that --depth=0 means infinite depth (making repository not-shallow). Second, it would be nice (though probably not easy with parseopt, as it would require hacks/extensions) to be able to use --depth=inf (like wget supports '-l inf') to mean infinite depth... -- Jakub Narebski Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again 2010-08-19 21:22 ` Jakub Narebski @ 2010-08-19 22:11 ` Nguyen Thai Ngoc Duy 2010-08-20 9:22 ` Jakub Narebski 0 siblings, 1 reply; 16+ messages in thread From: Nguyen Thai Ngoc Duy @ 2010-08-19 22:11 UTC (permalink / raw) To: Jakub Narebski; +Cc: git, computerdruid, joey On Fri, Aug 20, 2010 at 7:22 AM, Jakub Narebski <jnareb@gmail.com> wrote: > Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes: > >> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> >> --- >> The funny thing is, even with --depth=0, I still have two commit grafts >> in $GIT_DIR/shallow, which are grafts of tags. I think there is a bug >> somewhere.. >> >> builtin/fetch-pack.c | 2 +- >> shallow.c | 2 +- >> upload-pack.c | 8 ++++---- >> 3 files changed, 6 insertions(+), 6 deletions(-) >> > > Fist, it lacks documentation update that --depth=0 means infinite > depth (making repository not-shallow). Yeah. I would do documentation and tests later once I figured out why --depth=0 did not give me full repo. It turns out I need --tags to (refetch?) tags and have full repo. > Second, it would be nice (though probably not easy with parseopt, as > it would require hacks/extensions) to be able to use --depth=inf > (like wget supports '-l inf') to mean infinite depth... Hmm.. make --depth a string parameter and fetch-pack should parse the parameter itself, like git-clone. Good idea. -- Duy ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again 2010-08-19 22:11 ` Nguyen Thai Ngoc Duy @ 2010-08-20 9:22 ` Jakub Narebski 2010-08-20 9:28 ` Ramkumar Ramachandra 2010-08-20 11:55 ` [PATCH] grep -A/-B/-Cinfinity to get full context Jonathan Nieder 0 siblings, 2 replies; 16+ messages in thread From: Jakub Narebski @ 2010-08-20 9:22 UTC (permalink / raw) To: Nguyen Thai Ngoc Duy Cc: git, computerdruid, joey, Jonathan Nieder, Ramkumar Ramachandra On Fri, Aug 20, 2010, Nguyen Thai Ngoc Duy wrote: > On Fri, Aug 20, 2010 at 7:22 AM, Jakub Narebski <jnareb@gmail.com> wrote: >> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes: >> >>> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> >>> --- >>> The funny thing is, even with --depth=0, I still have two commit grafts >>> in $GIT_DIR/shallow, which are grafts of tags. I think there is a bug >>> somewhere.. >>> >>> builtin/fetch-pack.c | 2 +- >>> shallow.c | 2 +- >>> upload-pack.c | 8 ++++---- >>> 3 files changed, 6 insertions(+), 6 deletions(-) >>> >> >> Fist, it lacks documentation update that --depth=0 means infinite >> depth (making repository not-shallow). > > Yeah. I would do documentation and tests later once I figured out why > --depth=0 did not give me full repo. It turns out I need --tags to > (refetch?) tags and have full repo. Perhaps --depth=0 should also work as if --tags were specified on command line? BTW. shouldn't git fetch tags that point to commits that got doenloaded because of deepening the clone? > >> Second, it would be nice (though probably not easy with parseopt, as >> it would require hacks/extensions) to be able to use --depth=inf >> (like wget supports '-l inf') to mean infinite depth... > > Hmm.. make --depth a string parameter and fetch-pack should parse the > parameter itself, like git-clone. Good idea. If there were more options that use <n> == 0 to actually mean unlimited (infinity), perhaps it would be better to extend parseopt to provide for such situation, e.g. OPT_INT_INF or something. This way we would avoid code duplication. ... oh, wait, the newly introduced[1] git-merge `--log-limit' option uses --log-limit=0 to mean unlimited. [1] http://permalink.gmane.org/gmane.comp.version-control.git/153984 Message-ID: <20100820081641.GA32127@burratino> Subject: Re: wishlist bugreport: make limit configurable for do_fmt_merge_msg (merge.log) -- Jakub Narebski Poland ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again 2010-08-20 9:22 ` Jakub Narebski @ 2010-08-20 9:28 ` Ramkumar Ramachandra 2010-08-20 11:55 ` [PATCH] grep -A/-B/-Cinfinity to get full context Jonathan Nieder 1 sibling, 0 replies; 16+ messages in thread From: Ramkumar Ramachandra @ 2010-08-20 9:28 UTC (permalink / raw) To: Jakub Narebski Cc: Nguyen Thai Ngoc Duy, git, computerdruid, joey, Jonathan Nieder, Johannes Sixt Hi Jakub, Jakub Narebski writes: > >> Second, it would be nice (though probably not easy with parseopt, as > >> it would require hacks/extensions) to be able to use --depth=inf > >> (like wget supports '-l inf') to mean infinite depth... > > > > Hmm.. make --depth a string parameter and fetch-pack should parse the > > parameter itself, like git-clone. Good idea. > > If there were more options that use <n> == 0 to actually mean unlimited > (infinity), perhaps it would be better to extend parseopt to provide for > such situation, e.g. OPT_INT_INF or something. This way we would avoid > code duplication. > > ... oh, wait, the newly introduced[1] git-merge `--log-limit' option > uses --log-limit=0 to mean unlimited. > > [1] http://permalink.gmane.org/gmane.comp.version-control.git/153984 > Message-ID: <20100820081641.GA32127@burratino> > Subject: Re: wishlist bugreport: make limit configurable for do_fmt_merge_msg (merge.log) Just outdated by a few seconds. Johannes suggested that we reuse merge.log, making it a bool_or_int option. I What about using -1 to mean infinity and reserving 0 for false instead? -- Ram ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH] grep -A/-B/-Cinfinity to get full context 2010-08-20 9:22 ` Jakub Narebski 2010-08-20 9:28 ` Ramkumar Ramachandra @ 2010-08-20 11:55 ` Jonathan Nieder 2010-08-20 13:32 ` Ramkumar Ramachandra 1 sibling, 1 reply; 16+ messages in thread From: Jonathan Nieder @ 2010-08-20 11:55 UTC (permalink / raw) To: Jakub Narebski Cc: Nguyen Thai Ngoc Duy, git, computerdruid, joey, Ramkumar Ramachandra, René Scharfe Just a proof of concept. Cc: René Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- Jakub Narebski wrote: > If there were more options that use <n> == 0 to actually mean unlimited > (infinity), perhaps it would be better to extend parseopt to provide for > such situation, e.g. OPT_INT_INF or something. Something like this, maybe. Documentation/technical/api-parse-options.txt | 6 ++++++ builtin/grep.c | 8 ++++++-- grep.c | 8 +++++--- grep.h | 4 ++-- parse-options.c | 21 +++++++++++++++++++++ parse-options.h | 4 ++++ 6 files changed, 44 insertions(+), 7 deletions(-) diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.txt index 312e3b2..f152a3f 100644 --- a/Documentation/technical/api-parse-options.txt +++ b/Documentation/technical/api-parse-options.txt @@ -160,6 +160,12 @@ There are some macros to easily define options: Introduce an option with integer argument. The integer is put into `int_var`. +`OPT_INT_INF(short, long, &int_var, inf_val, description)`:: + Introduce an option with integer argument. + The integer is put into `int_var`. If the special value + "inf" (or "infinity") is used as an argument, then `inf_val` + is put into `int_var`. + `OPT_DATE(short, long, &int_var, description)`:: Introduce an option with date argument, see `approxidate()`. The timestamp is put into `int_var`. diff --git a/builtin/grep.c b/builtin/grep.c index 597f76b..9fbc985 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -750,6 +750,10 @@ static int context_callback(const struct option *opt, const char *arg, grep_opt->pre_context = grep_opt->post_context = 0; return 0; } + if (!strcasecmp(arg, "inf") || !strcasecmp(arg, "infinity")) { + grep_opt->pre_context = grep_opt->post_context = -1; + return 0; + } value = strtol(arg, (char **)&endp, 10); if (*endp) { return error("switch `%c' expects a numerical value", @@ -890,9 +894,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix) OPT_CALLBACK('C', NULL, &opt, "n", "show <n> context lines before and after matches", context_callback), - OPT_INTEGER('B', NULL, &opt.pre_context, + OPT_INT_INF('B', NULL, &opt.pre_context, -1, "show <n> context lines before matches"), - OPT_INTEGER('A', NULL, &opt.post_context, + OPT_INT_INF('A', NULL, &opt.post_context, -1, "show <n> context lines after matches"), OPT_NUMBER_CALLBACK(&opt, "shortcut for -C NUM", context_callback), diff --git a/grep.c b/grep.c index 82fb349..793d41f 100644 --- a/grep.c +++ b/grep.c @@ -687,7 +687,7 @@ static void show_pre_context(struct grep_opt *opt, const char *name, char *buf, unsigned cur = lno, from = 1, funcname_lno = 0; int funcname_needed = opt->funcname; - if (opt->pre_context < lno) + if (opt->pre_context >= 0 && opt->pre_context < lno) from = lno - opt->pre_context; if (from <= opt->last_shown) from = opt->last_shown + 1; @@ -861,7 +861,8 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, */ if (try_lookahead && !(last_hit - && lno <= last_hit + opt->post_context) + && (opt->post_context < 0 + || lno <= last_hit + opt->post_context)) && look_ahead(opt, &left, &lno, &bol)) break; eol = end_of_line(bol, &left); @@ -916,7 +917,8 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, last_hit = lno; } else if (last_hit && - lno <= last_hit + opt->post_context) { + (opt->post_context < 0 || + lno <= last_hit + opt->post_context)) { /* If the last hit is within the post context, * we need to show this line. */ diff --git a/grep.h b/grep.h index efa8cff..13aae94 100644 --- a/grep.h +++ b/grep.h @@ -95,8 +95,8 @@ struct grep_opt { char color_selected[COLOR_MAXLEN]; char color_sep[COLOR_MAXLEN]; int regflags; - unsigned pre_context; - unsigned post_context; + int pre_context; + int post_context; unsigned last_shown; int show_hunk_mark; void *priv; diff --git a/parse-options.c b/parse-options.c index 0fa79bc..b299125 100644 --- a/parse-options.c +++ b/parse-options.c @@ -612,6 +612,27 @@ int parse_opt_approxidate_cb(const struct option *opt, const char *arg, return 0; } +int parse_opt_infinity_cb(const struct option *opt, const char *arg, + int unset) +{ + const char *endp; + + if (unset) { + *(int *)opt->value = 0; + return 0; + } + if (!arg) + return opterror(opt, "expects a numerical value", 0); + if (!strcasecmp(arg, "inf") || !strcasecmp(arg, "infinity")) { + *(int *)opt->value = opt->defval; + return 0; + } + *(int *)opt->value = strtol(arg, (char **)&endp, 10); + if (*endp) + return opterror(opt, "expects a numerical value", 0); + return 0; +} + int parse_opt_color_flag_cb(const struct option *opt, const char *arg, int unset) { diff --git a/parse-options.h b/parse-options.h index 7435cdb..6ae041a 100644 --- a/parse-options.h +++ b/parse-options.h @@ -126,6 +126,9 @@ struct option { #define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) } #define OPT_UYN(s, l, v, h) { OPTION_CALLBACK, (s), (l), (v), NULL, \ (h), PARSE_OPT_NOARG, &parse_opt_tertiary } +#define OPT_INT_INF(s, l, v, i, h) \ + { OPTION_CALLBACK, (s), (l), (v), "n", (h), 0, \ + parse_opt_infinity_cb, (intptr_t)(i) } #define OPT_DATE(s, l, v, h) \ { OPTION_CALLBACK, (s), (l), (v), "time",(h), 0, \ parse_opt_approxidate_cb } @@ -193,6 +196,7 @@ extern int parse_options_concat(struct option *dst, size_t, struct option *src); /*----- some often used options -----*/ extern int parse_opt_abbrev_cb(const struct option *, const char *, int); extern int parse_opt_approxidate_cb(const struct option *, const char *, int); +extern int parse_opt_infinity_cb(const struct option *, const char *, int); extern int parse_opt_color_flag_cb(const struct option *, const char *, int); extern int parse_opt_verbosity_cb(const struct option *, const char *, int); extern int parse_opt_with_commit(const struct option *, const char *, int); -- 1.7.2.2.536.g42dab.dirty ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH] grep -A/-B/-Cinfinity to get full context 2010-08-20 11:55 ` [PATCH] grep -A/-B/-Cinfinity to get full context Jonathan Nieder @ 2010-08-20 13:32 ` Ramkumar Ramachandra 0 siblings, 0 replies; 16+ messages in thread From: Ramkumar Ramachandra @ 2010-08-20 13:32 UTC (permalink / raw) To: Jonathan Nieder Cc: Jakub Narebski, Nguyen Thai Ngoc Duy, git, computerdruid, joey, René Scharfe Hi Jonathan, Jonathan Nieder writes: > Just a proof of concept. > > Cc: René Scharfe <rene.scharfe@lsrfire.ath.cx> > Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Elegant. OPT_INTEGER for integers without the ability to represent infinity, and OPT_INT_INF for integers with definite representation for infinity. > diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.txt > index 312e3b2..f152a3f 100644 > --- a/Documentation/technical/api-parse-options.txt > +++ b/Documentation/technical/api-parse-options.txt > @@ -160,6 +160,12 @@ There are some macros to easily define options: > Introduce an option with integer argument. > The integer is put into `int_var`. > > +`OPT_INT_INF(short, long, &int_var, inf_val, description)`:: > + Introduce an option with integer argument. > + The integer is put into `int_var`. If the special value > + "inf" (or "infinity") is used as an argument, then `inf_val` > + is put into `int_var`. Nice. You're making the caller pass the `inf_val` argument - this way, each caller can figure out some integer that's outside its sane range and use that to represent infinity. > - OPT_INTEGER('B', NULL, &opt.pre_context, > + OPT_INT_INF('B', NULL, &opt.pre_context, -1, > "show <n> context lines before matches"), > - OPT_INTEGER('A', NULL, &opt.post_context, > + OPT_INT_INF('A', NULL, &opt.post_context, -1, > "show <n> context lines after matches"), > OPT_NUMBER_CALLBACK(&opt, "shortcut for -C NUM", > context_callback), For many cases, -1 is probably a good value to choose. > diff --git a/parse-options.h b/parse-options.h > index 7435cdb..6ae041a 100644 > --- a/parse-options.h > +++ b/parse-options.h > @@ -126,6 +126,9 @@ struct option { > #define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) } > #define OPT_UYN(s, l, v, h) { OPTION_CALLBACK, (s), (l), (v), NULL, \ > (h), PARSE_OPT_NOARG, &parse_opt_tertiary } > +#define OPT_INT_INF(s, l, v, i, h) \ > + { OPTION_CALLBACK, (s), (l), (v), "n", (h), 0, \ > + parse_opt_infinity_cb, (intptr_t)(i) } Okay, you've used the same character "n" for OPT_INTEGER and OPT_INT_INF. Thanks for the pleasant reading. -- Ram ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: fully deepening a shallow clone 2010-08-18 9:36 ` Nguyen Thai Ngoc Duy 2010-08-18 12:54 ` Daniel Johnson @ 2010-08-18 15:48 ` Joey Hess 1 sibling, 0 replies; 16+ messages in thread From: Joey Hess @ 2010-08-18 15:48 UTC (permalink / raw) To: Nguyen Thai Ngoc Duy; +Cc: git [-- Attachment #1: Type: text/plain, Size: 761 bytes --] Nguyen Thai Ngoc Duy wrote: > On Tue, Aug 17, 2010 at 10:49 AM, Joey Hess <joey@kitenet.net> wrote: > > git-pull(1): > > --depth=<depth> > > Deepen the history of a shallow repository created by git clone > > with --depth=<depth> option (see git-clone(1)) by the specified > > number of commits. > > > > Well, what if I want to deepen an existing shallow clone to include > > the full history? In practice, something like --depth=100000000 is going > > to work, but in theory, that will eventually fail some day when there are > > enough commits. :) > > I have always thought --depth=0 will make full repo again. Have you tried that? I'd be happy if it did, but it pulls 0 revs actually. -- see shy jo [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 828 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2010-08-20 13:34 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-08-17 0:49 fully deepening a shallow clone Joey Hess 2010-08-18 9:36 ` Nguyen Thai Ngoc Duy 2010-08-18 12:54 ` Daniel Johnson 2010-08-19 10:40 ` [PATCH 1/3] clone: do not accept --depth on local clones Nguyễn Thái Ngọc Duy 2010-08-19 14:31 ` Daniel Johnson 2010-08-19 22:15 ` Nguyen Thai Ngoc Duy 2010-08-19 20:49 ` Mikael Magnusson 2010-08-19 10:40 ` [PATCH 2/3] fetch-pack: use args.shallow to detect shallow clone instead of args.depth Nguyễn Thái Ngọc Duy 2010-08-19 10:40 ` [PATCH 3/3] {fetch,upload}-pack: allow --depth=0 to deepen into full repo again Nguyễn Thái Ngọc Duy 2010-08-19 21:22 ` Jakub Narebski 2010-08-19 22:11 ` Nguyen Thai Ngoc Duy 2010-08-20 9:22 ` Jakub Narebski 2010-08-20 9:28 ` Ramkumar Ramachandra 2010-08-20 11:55 ` [PATCH] grep -A/-B/-Cinfinity to get full context Jonathan Nieder 2010-08-20 13:32 ` Ramkumar Ramachandra 2010-08-18 15:48 ` fully deepening a shallow clone Joey Hess
Code repositories for project(s) associated with this public inbox https://80x24.org/mirrors/git.git 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 read-only IMAP folder(s) and NNTP newsgroup(s).