Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- It is kind of surprising that 16 & 17 can be so simple and does not have to update the way the cut-off points at the client side are computed or recorded. We must have done something right when we designed the initial "--depth" support ;-). On the other hand, that probably means we have the same "we clone once, wait for a while and then do a shallow fetch with too short a history span--the objects in the original clone all go too stale that they become invisible in the resulting history" property (I would not call that "an issue") as before. It is just the way the shallow boundary is specified got more user friendly (from a number of parent-child hops to timespan). Let's keep reading... > Documentation/git-clone.txt | 3 +++ > builtin/clone.c | 16 +++++++++++++--- > 2 files changed, 16 insertions(+), 3 deletions(-) > > diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt > index 789b668..1b6b639 100644 > --- a/Documentation/git-clone.txt > +++ b/Documentation/git-clone.txt > @@ -194,6 +194,9 @@ objects from the source repository into a pack in the cloned repository. > `--no-single-branch` is given to fetch the histories near the > tips of all branches. > > +--shallow-since=<date>:: > + Create a shallow clone with a history after the specified time. > + > --[no-]single-branch:: > Clone only the history leading to the tip of a single branch, > either specified by the `--branch` option or the primary > diff --git a/builtin/clone.c b/builtin/clone.c > index bcba080..dc2ef4f 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -40,7 +40,8 @@ static const char * const builtin_clone_usage[] = { > > static int option_no_checkout, option_bare, option_mirror, option_single_branch = -1; > static int option_local = -1, option_no_hardlinks, option_shared, option_recursive; > -static char *option_template, *option_depth; > +static int deepen; > +static char *option_template, *option_depth, *option_since; > static char *option_origin = NULL; > static char *option_branch = NULL; > static const char *real_git_dir; > @@ -86,6 +87,8 @@ static struct option builtin_clone_options[] = { > N_("path to git-upload-pack on the remote")), > OPT_STRING(0, "depth", &option_depth, N_("depth"), > N_("create a shallow clone of that depth")), > + OPT_STRING(0, "shallow-since", &option_since, N_("time"), > + N_("create a shallow clone since a specific time")), > OPT_BOOL(0, "single-branch", &option_single_branch, > N_("clone only one branch, HEAD or --branch")), > OPT_STRING(0, "separate-git-dir", &real_git_dir, N_("gitdir"), > @@ -849,8 +852,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > usage_msg_opt(_("You must specify a repository to clone."), > builtin_clone_usage, builtin_clone_options); > > + if (option_depth || option_since) > + deepen = 1; > if (option_single_branch == -1) > - option_single_branch = option_depth ? 1 : 0; > + option_single_branch = deepen ? 1 : 0; > > if (option_mirror) > option_bare = 1; > @@ -976,6 +981,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > if (is_local) { > if (option_depth) > warning(_("--depth is ignored in local clones; use file:// instead.")); > + if (option_since) > + warning(_("--shallow-since is ignored in local clones; use file:// instead.")); > if (!access(mkpath("%s/shallow", path), F_OK)) { > if (option_local > 0) > warning(_("source repository is shallow, ignoring --local")); > @@ -994,6 +1001,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > if (option_depth) > transport_set_option(transport, TRANS_OPT_DEPTH, > option_depth); > + if (option_since) > + transport_set_option(transport, TRANS_OPT_DEEPEN_SINCE, > + option_since); > if (option_single_branch) > transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1"); > > @@ -1001,7 +1011,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > transport_set_option(transport, TRANS_OPT_UPLOADPACK, > option_upload_pack); > > - if (transport->smart_options && !option_depth) > + if (transport->smart_options && !deepen) > transport->smart_options->check_self_contained_and_connected = 1; > > refs = transport_get_remote_refs(transport); -- 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