git-commit-vandalism/builtin
Nguyễn Thái Ngọc Duy cccf74e2da fetch, upload-pack: --deepen=N extends shallow boundary by N commits
In git-fetch, --depth argument is always relative with the latest
remote refs. This makes it a bit difficult to cover this use case,
where the user wants to make the shallow history, say 3 levels
deeper. It would work if remote refs have not moved yet, but nobody
can guarantee that, especially when that use case is performed a
couple months after the last clone or "git fetch --depth". Also,
modifying shallow boundary using --depth does not work well with
clones created by --since or --not.

This patch fixes that. A new argument --deepen=<N> will add <N> more (*)
parent commits to the current history regardless of where remote refs
are.

Have/Want negotiation is still respected. So if remote refs move, the
server will send two chunks: one between "have" and "want" and another
to extend shallow history. In theory, the client could send no "want"s
in order to get the second chunk only. But the protocol does not allow
that. Either you send no want lines, which means ls-remote; or you
have to send at least one want line that carries deep-relative to the
server..

The main work was done by Dongcan Jiang. I fixed it up here and there.
And of course all the bugs belong to me.

(*) We could even support --deepen=<N> where <N> is negative. In that
case we can cut some history from the shallow clone. This operation
(and --depth=<shorter depth>) does not require interaction with remote
side (and more complicated to implement as a result).

Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Dongcan Jiang <dongcan.jiang@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-06-13 14:38:16 -07:00
..
add.c Merge branch 'jc/add-u-A-default-to-top' into maint 2015-11-05 12:18:12 -08:00
am.c Merge branch 'nd/diff-with-path-params' 2016-02-03 14:16:04 -08:00
annotate.c
apply.c apply, ls-files: simplify "-z" parsing 2016-02-01 14:14:20 -08:00
archive.c
bisect--helper.c
blame.c Merge branch 'nd/ita-cleanup' 2016-01-20 11:43:25 -08:00
branch.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
bundle.c
cat-file.c cat-file: read batch stream with strbuf_getline() 2016-01-15 10:35:06 -08:00
check-attr.c give "nbuf" strbuf a more meaningful name 2016-02-01 13:43:02 -08:00
check-ignore.c give "nbuf" strbuf a more meaningful name 2016-02-01 13:43:02 -08:00
check-mailmap.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
check-ref-format.c
checkout-index.c checkout-index: disallow "--no-stage" option 2016-02-01 13:43:49 -08:00
checkout.c checkout,clone: check return value of create_symref 2016-01-12 11:11:52 -08:00
clean.c Merge branch 'jk/ref-cache-non-repository-optim' 2016-02-03 14:16:07 -08:00
clone.c clone: define shallow clone boundary with --shallow-exclude 2016-06-13 14:38:16 -07:00
column.c column: read lines with strbuf_getline() 2016-01-15 10:35:07 -08:00
commit-tree.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
commit.c Merge branch 'jc/strbuf-getline' 2016-01-28 16:10:14 -08:00
config.c config: use xstrfmt in normalize_value 2015-09-25 10:18:18 -07:00
count-objects.c
credential.c
describe.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
diff-files.c
diff-index.c
diff-tree.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
diff.c Merge branch 'nd/diff-with-path-params' 2016-02-03 14:16:04 -08:00
fast-export.c Merge branch 'js/fopen-harder' 2016-01-20 11:43:35 -08:00
fetch-pack.c fetch, upload-pack: --deepen=N extends shallow boundary by N commits 2016-06-13 14:38:16 -07:00
fetch.c fetch, upload-pack: --deepen=N extends shallow boundary by N commits 2016-06-13 14:38:16 -07:00
fmt-merge-msg.c Merge branch 'rs/pop-commit' into maint 2015-12-11 11:14:13 -08:00
for-each-ref.c ref-filter: add option to match literal pattern 2015-09-17 10:02:49 -07:00
fsck.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
gc.c Merge branch 'dk/gc-idx-wo-pack' into maint 2015-12-04 11:33:08 -08:00
get-tar-commit-id.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
grep.c Merge branch 'jc/peace-with-crlf' 2016-02-03 14:15:58 -08:00
hash-object.c Merge branch 'jk/options-cleanup' 2016-02-10 14:20:08 -08:00
help.c convert strncpy to memcpy 2015-10-05 11:08:06 -07:00
index-pack.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
init-db.c initdb: make safe_create_dir public 2015-11-20 04:52:01 -05:00
interpret-trailers.c interpret-trailers: add option for in-place editing 2016-01-14 12:22:17 -08:00
log.c format-patch: introduce format.outputDirectory configuration 2016-01-13 10:55:01 -08:00
ls-files.c Merge branch 'jk/options-cleanup' 2016-02-10 14:20:08 -08:00
ls-remote.c ls-remote: add support for showing symrefs 2016-01-19 10:07:56 -08:00
ls-tree.c convert trivial sprintf / strcpy calls to xsnprintf 2015-09-25 10:18:18 -07:00
mailinfo.c mailinfo: libify 2015-10-21 15:59:34 -07:00
mailsplit.c mailsplit: make PATH_MAX buffers dynamic 2015-09-25 10:18:18 -07:00
merge-base.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
merge-file.c Merge branch 'jk/merge-file-exit-code' into maint 2015-11-03 15:32:41 -08:00
merge-index.c use sha1_to_hex_r() instead of strcpy 2015-10-05 11:08:05 -07:00
merge-ours.c
merge-recursive.c convert trivial sprintf / strcpy calls to xsnprintf 2015-09-25 10:18:18 -07:00
merge-tree.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
merge.c merge: release pack files before garbage-collecting 2016-01-13 11:36:28 -08:00
mktag.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
mktree.c mktree: there are only two possible line terminations 2016-01-15 10:12:58 -08:00
mv.c
name-rev.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
notes.c Merge branch 'jk/notes-merge-from-anywhere' 2016-02-03 14:15:59 -08:00
pack-objects.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
pack-redundant.c
pack-refs.c
patch-id.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
prune-packed.c
prune.c Merge branch 'jk/repository-extension' into maint 2015-11-03 15:32:25 -08:00
pull.c Merge branch 'jc/strbuf-getline' 2016-01-28 16:10:14 -08:00
push.c Merge branch 'ps/push-delete-option' 2016-01-12 15:16:54 -08:00
read-tree.c convert trivial sprintf / strcpy calls to xsnprintf 2015-09-25 10:18:18 -07:00
receive-pack.c Merge branch 'js/close-packs-before-gc' 2016-01-26 15:40:29 -08:00
reflog.c Merge branch 'rs/pop-commit' into maint 2015-12-11 11:14:13 -08:00
remote-ext.c remote-ext: simplify git pkt-line generation 2015-09-25 10:18:18 -07:00
remote-fd.c
remote.c remote: handle the config setting branch.*.rebase=interactive 2016-01-13 13:00:01 -08:00
repack.c strbuf: introduce strbuf_getline_{lf,nul}() 2016-01-15 10:12:51 -08:00
replace.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
rerere.c Sync with 2.6.1 2015-10-05 13:20:08 -07:00
reset.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
rev-list.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
rev-parse.c rev-parse: read parseopt spec with strbuf_getline() 2016-01-15 10:34:41 -08:00
revert.c
rm.c Merge branch 'nd/ita-cleanup' 2016-01-20 11:43:25 -08:00
send-pack.c send-pack: read list of refs with strbuf_getline() 2016-01-15 10:35:07 -08:00
shortlog.c Merge branch 'jk/shortlog' 2016-01-28 16:10:14 -08:00
show-branch.c Merge branch 'rs/show-branch-argv-array' into maint 2015-12-11 11:14:14 -08:00
show-ref.c show-ref: stop using PARSE_OPT_NO_INTERNAL_HELP 2015-11-20 08:02:07 -05:00
stripspace.c stripspace: call U+0020 a "space" instead of a "blank" 2016-01-29 16:02:34 -08:00
submodule--helper.c submodule: rewrite module_clone shell function in C 2015-09-08 15:48:21 -07:00
symbolic-ref.c symbolic-ref: propagate error code from create_symref() 2015-12-21 12:03:03 -08:00
tag.c tag: do not show ambiguous tag names as "tags/foo" 2016-01-26 13:34:10 -08:00
unpack-file.c convert trivial sprintf / strcpy calls to xsnprintf 2015-09-25 10:18:18 -07:00
unpack-objects.c Remove get_object_hash. 2015-11-20 08:02:05 -05:00
update-index.c Merge branch 'jk/options-cleanup' 2016-02-10 14:20:08 -08:00
update-ref.c tag, update-ref: improve description of option "create-reflog" 2015-09-11 09:50:02 -07:00
update-server-info.c
upload-archive.c upload-archive: convert sprintf to strbuf 2015-09-25 10:18:18 -07:00
var.c
verify-commit.c
verify-pack.c
verify-tag.c
worktree.c Convert struct object to object_id 2015-11-20 08:02:05 -05:00
write-tree.c