Subject: [PATCH 00/20] More flexibility in making shallow clones

From: Nguyễn Thái Ngọc Duy <[email-masked]>
Date: Tue, 29 Dec 2015 19:10:23 +0700

This series brings three new options to shallow clone/fetch. --since
lets you specify cut point by time. --not cuts by excluding specified
refs. And --deepen=<N> extends shallow boundary in a more predictable
way. Some of these were requested in the past.

An important point of this series is it starts to use rev-list behind
the scene to define shallow boundary, which opens doors to even more
ways of cutting a repository.

The series is good enough to look at but I don't think I have stared
long enough to spot all the bugs. This mail is mostly about checking
if the design (at both code and protocol levels) and the UI make
sense. I'm thinking --since and --not may be too generic, but I don't
see any better names, for example.

Refactor/cleanup patches are sprinkled throughout (bad?). The meat is
in 05, 09, 12, 13, 16, 17, 18 and 20.

HTTP support is not in this series (and I don't intend to do soon).
The amount of filler code just to pass some info from UI down to the
protocol seems too much, and it's even more so when HTTP support is
added. But I don't see anyway around it. Maybe we can share some code
between git-clone, git-fetch and git-fetch-pack, at least the argument
parsing..

Nguyễn Thái Ngọc Duy (20):
  upload-pack: move shallow deepen code out of receive_needs()
  upload-pack: move "shallow" sending code out of deepen()
  upload-pack: remove unused variable "backup"
  upload-pack: move "unshallow" sending code out of deepen()
  shallow.c: implement a generic shallow boundary finder based on rev-list
  upload-pack: glue code to use get_shallow_commits_by_rev_list
  upload-pack: use skip_prefix() instead of starts_with() when possible
  upload-pack: tighten number parsing at "deepen" lines
  upload-pack: add deepen-since to cut shallow repos based on time
  fetch-pack: use a common function for verbose printing
  fetch-pack: use a separate flag for fetch in deepening mode
  fetch: define shallow boundary with --since
  clone: define shallow clone boundary based on time with --since
  Add test_repo_expect_success for running tests in a new repository
  t5500: test for shallow depth since a specific date
  upload-pack: support define shallow boundary by excluding revisions
  fetch: define shallow boundary with --not
  clone: define shallow clone boundary with --not
  t5500: test for shallow depth excluding a ref
  fetch: add --deepen=<N> to extend shallow boundary by <N> commits

 Documentation/fetch-options.txt                   |  14 ++
 Documentation/git-clone.txt                       |   8 +
 Documentation/technical/pack-protocol.txt         |   4 +-
 Documentation/technical/protocol-capabilities.txt |  25 +++
 builtin/clone.c                                   |  32 +++-
 builtin/fetch.c                                   |  44 ++++-
 commit.h                                          |   2 +
 fetch-pack.c                                      | 128 ++++++++------
 fetch-pack.h                                      |   4 +
 shallow.c                                         |  92 ++++++++++
 t/README                                          |  15 ++
 t/t5500-fetch-pack.sh                             |  36 ++++
 t/t5510-fetch.sh                                  |  12 ++
 t/test-lib-functions.sh                           |  20 +++
 transport.c                                       |  11 ++
 transport.h                                       |  14 ++
 upload-pack.c                                     | 206 ++++++++++++++++------
 17 files changed, 550 insertions(+), 117 deletions(-)

-- 
2.3.0.rc1.137.g477eb31