Message ID | 0b93abe072aa35ab96ba3b97118caa8ffe8e439d.1588199705.git.me@ttaylorr.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | shallow: extract a header file | expand |
On Wed, Apr 29, 2020 at 6:39 PM Taylor Blau <me@ttaylorr.com> wrote: > There are many functions in commit.h that are more related to shallow > repositories than they are to any sort of generic commit machinery. > Likely this began when there were only a few shallow-related functions, > and commit.h seemed a reasonable enough place to put them. > > But, now there are a good number of shallow-related functions, and > placing them all in 'commit.h' doesn't make sense. > > This patch extracts a 'shallow.h', which takes all of the headers from Did you mean s/headers/declarations/ ? > 'commit.h' for functions which already exist in 'shallow.c'. We will > bring the remaining shallow-related functions defined in 'commit.c' in a > subsequent patch. > > For now, move only the ones that already are implemented in 'shallow.c', > and update the necessary includes. > > Signed-off-by: Taylor Blau <me@ttaylorr.com>
First of all, I couldn't apply these patches neither on latest master (86ab15cb15 ("The fourth batch", 2020-04-28)) nor on its 2 immediate ancestors - what is the base of these patches? (Or is there something wrong with my workflow?) I'll review based on the patches themselves, but what I've seen looks good so far. > diff --git a/builtin.h b/builtin.h > index 2b25a80cde..2e701a023c 100644 > --- a/builtin.h > +++ b/builtin.h > @@ -5,6 +5,7 @@ > #include "strbuf.h" > #include "cache.h" > #include "commit.h" > +#include "shallow.h" It's a pity that builtin.h has to be modified in this way, but I see that it's necessary - a few files that include builtin.h (at least git.c and builtin/bisect--helper.c) assume that they have shallow function access through this header. Once I manage to apply these patches myself, I'll verify with --color-moved that the lines moved as I expect, but otherwise patch 1 and 2 look good.
Hi Jonathan, On Wed, Apr 29, 2020 at 05:21:54PM -0700, Jonathan Tan wrote: > First of all, I couldn't apply these patches neither on latest master > (86ab15cb15 ("The fourth batch", 2020-04-28)) nor on its 2 immediate > ancestors - what is the base of these patches? (Or is there something > wrong with my workflow?) Yes, I should have mentioned in the cover letter that this is based on 'tb/reset-shallow' which is should be part of Junio's next push to master. I didn't mention it because I figured that it would be on master by the time anyone wanted to look at these patches ;). Anyhow, apologies. It should apply cleanly on any branch that has 'tb/reset-shallow' already. > I'll review based on the patches themselves, but what I've seen looks > good so far. > > > diff --git a/builtin.h b/builtin.h > > index 2b25a80cde..2e701a023c 100644 > > --- a/builtin.h > > +++ b/builtin.h > > @@ -5,6 +5,7 @@ > > #include "strbuf.h" > > #include "cache.h" > > #include "commit.h" > > +#include "shallow.h" > > It's a pity that builtin.h has to be modified in this way, but I see > that it's necessary - a few files that include builtin.h (at least git.c > and builtin/bisect--helper.c) assume that they have shallow function > access through this header. Yeah :/. > Once I manage to apply these patches myself, I'll verify with > --color-moved that the lines moved as I expect, but otherwise patch 1 > and 2 look good. Thanks. Thanks, Taylor
Taylor Blau wrote: > There are many functions in commit.h that are more related to shallow > repositories than they are to any sort of generic commit machinery. > Likely this began when there were only a few shallow-related functions, > and commit.h seemed a reasonable enough place to put them. > > But, now there are a good number of shallow-related functions, and > placing them all in 'commit.h' doesn't make sense. Sure. For me, there are a few additional sources of motivation: - shallow clone is a bit of a thorny feature, so I like having the indication of which source files are interacting with it - this will give us a good place to put any overview documentation on the shallow API > This patch extracts a 'shallow.h', which takes all of the headers from > 'commit.h' for functions which already exist in 'shallow.c'. We will > bring the remaining shallow-related functions defined in 'commit.c' in a > subsequent patch. > > For now, move only the ones that already are implemented in 'shallow.c', > and update the necessary includes. It's probably worth a mention of the builtin.h part here. (By the way, I wouldn't be against propagating that to the callers, to better match what https://include-what-you-use.org/ would enforce.) Thanks, Jonathan
> Yes, I should have mentioned in the cover letter that this is based on > 'tb/reset-shallow' which is should be part of Junio's next push to > master. I didn't mention it because I figured that it would be on master > by the time anyone wanted to look at these patches ;). > > Anyhow, apologies. It should apply cleanly on any branch that has > 'tb/reset-shallow' already. Thanks. Now that I'm able to apply the patches, I see that the prototype for unregister_shallow() was removed with no corresponding addition. This causes a compile error when running "make" with DEVELOPER=1. Other than that, things look fine.
diff --git a/builtin.h b/builtin.h index 2b25a80cde..2e701a023c 100644 --- a/builtin.h +++ b/builtin.h @@ -5,6 +5,7 @@ #include "strbuf.h" #include "cache.h" #include "commit.h" +#include "shallow.h" /* * builtin API diff --git a/commit.c b/commit.c index b76f7d72be..eebfbeb45d 100644 --- a/commit.c +++ b/commit.c @@ -20,6 +20,7 @@ #include "refs.h" #include "commit-reach.h" #include "run-command.h" +#include "shallow.h" static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **); diff --git a/commit.h b/commit.h index eb42e8b6d2..5cd984939b 100644 --- a/commit.h +++ b/commit.h @@ -248,55 +248,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit); struct oid_array; struct ref; -int register_shallow(struct repository *r, const struct object_id *oid); -int unregister_shallow(const struct object_id *oid); -int commit_shallow_file(struct repository *r, struct lock_file *lk); -void rollback_shallow_file(struct repository *r, struct lock_file *lk); int for_each_commit_graft(each_commit_graft_fn, void *); -int is_repository_shallow(struct repository *r); -struct commit_list *get_shallow_commits(struct object_array *heads, - int depth, int shallow_flag, int not_shallow_flag); -struct commit_list *get_shallow_commits_by_rev_list( - int ac, const char **av, int shallow_flag, int not_shallow_flag); -void set_alternate_shallow_file(struct repository *r, const char *path, int override); -int write_shallow_commits(struct strbuf *out, int use_pack_protocol, - const struct oid_array *extra); -void setup_alternate_shallow(struct lock_file *shallow_lock, - const char **alternate_shallow_file, - const struct oid_array *extra); -const char *setup_temporary_shallow(const struct oid_array *extra); -void advertise_shallow_grafts(int); - -/* - * Initialize with prepare_shallow_info() or zero-initialize (equivalent to - * prepare_shallow_info with a NULL oid_array). - */ -struct shallow_info { - struct oid_array *shallow; - int *ours, nr_ours; - int *theirs, nr_theirs; - struct oid_array *ref; - - /* for receive-pack */ - uint32_t **used_shallow; - int *need_reachability_test; - int *reachable; - int *shallow_ref; - struct commit **commits; - int nr_commits; -}; - -void prepare_shallow_info(struct shallow_info *, struct oid_array *); -void clear_shallow_info(struct shallow_info *); -void remove_nonexistent_theirs_shallow(struct shallow_info *); -void assign_shallow_commits_to_refs(struct shallow_info *info, - uint32_t **used, - int *ref_status); -int delayed_reachability_test(struct shallow_info *si, int c); -#define PRUNE_SHOW_ONLY 1 -#define PRUNE_QUICK 2 -void prune_shallow(unsigned options); -extern struct trace_key trace_shallow; int interactive_add(int argc, const char **argv, const char *prefix, int patch); int run_add_interactive(const char *revision, const char *patch_mode, diff --git a/fetch-pack.c b/fetch-pack.c index a618f3b029..401d028e41 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -22,6 +22,7 @@ #include "connected.h" #include "fetch-negotiator.h" #include "fsck.h" +#include "shallow.h" static int transfer_unpack_limit = -1; static int fetch_unpack_limit = -1; diff --git a/send-pack.c b/send-pack.c index 0407841ae8..e0ccfef75a 100644 --- a/send-pack.c +++ b/send-pack.c @@ -15,6 +15,7 @@ #include "sha1-array.h" #include "gpg-interface.h" #include "cache.h" +#include "shallow.h" int option_parse_push_signed(const struct option *opt, const char *arg, int unset) diff --git a/shallow.c b/shallow.c index 5010a6c732..d0191c7609 100644 --- a/shallow.c +++ b/shallow.c @@ -14,6 +14,7 @@ #include "commit-slab.h" #include "list-objects.h" #include "commit-reach.h" +#include "shallow.h" void set_alternate_shallow_file(struct repository *r, const char *path, int override) { diff --git a/shallow.h b/shallow.h new file mode 100644 index 0000000000..14dd748625 --- /dev/null +++ b/shallow.h @@ -0,0 +1,63 @@ +#ifndef SHALLOW_H +#define SHALLOW_H + +#include "lockfile.h" +#include "object.h" +#include "repository.h" +#include "strbuf.h" + +void set_alternate_shallow_file(struct repository *r, const char *path, int override); +int register_shallow(struct repository *r, const struct object_id *oid); +int is_repository_shallow(struct repository *r); +int commit_shallow_file(struct repository *r, struct lock_file *lk); +void rollback_shallow_file(struct repository *r, struct lock_file *lk); + +struct commit_list *get_shallow_commits(struct object_array *heads, + int depth, int shallow_flag, int not_shallow_flag); +struct commit_list *get_shallow_commits_by_rev_list( + int ac, const char **av, int shallow_flag, int not_shallow_flag); +int write_shallow_commits(struct strbuf *out, int use_pack_protocol, + const struct oid_array *extra); + +void setup_alternate_shallow(struct lock_file *shallow_lock, + const char **alternate_shallow_file, + const struct oid_array *extra); + +const char *setup_temporary_shallow(const struct oid_array *extra); + +void advertise_shallow_grafts(int); + +#define PRUNE_SHOW_ONLY 1 +#define PRUNE_QUICK 2 +void prune_shallow(unsigned options); + +/* + * Initialize with prepare_shallow_info() or zero-initialize (equivalent to + * prepare_shallow_info with a NULL oid_array). + */ +struct shallow_info { + struct oid_array *shallow; + int *ours, nr_ours; + int *theirs, nr_theirs; + struct oid_array *ref; + + /* for receive-pack */ + uint32_t **used_shallow; + int *need_reachability_test; + int *reachable; + int *shallow_ref; + struct commit **commits; + int nr_commits; +}; + +void prepare_shallow_info(struct shallow_info *, struct oid_array *); +void clear_shallow_info(struct shallow_info *); +void remove_nonexistent_theirs_shallow(struct shallow_info *); +void assign_shallow_commits_to_refs(struct shallow_info *info, + uint32_t **used, + int *ref_status); +int delayed_reachability_test(struct shallow_info *si, int c); + +extern struct trace_key trace_shallow; + +#endif /* SHALLOW_H */ diff --git a/upload-pack.c b/upload-pack.c index c53249cac1..e71b068291 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -26,6 +26,7 @@ #include "serve.h" #include "commit-graph.h" #include "commit-reach.h" +#include "shallow.h" /* Remember to update object flag allocation in object.h */ #define THEY_HAVE (1u << 11)
There are many functions in commit.h that are more related to shallow repositories than they are to any sort of generic commit machinery. Likely this began when there were only a few shallow-related functions, and commit.h seemed a reasonable enough place to put them. But, now there are a good number of shallow-related functions, and placing them all in 'commit.h' doesn't make sense. This patch extracts a 'shallow.h', which takes all of the headers from 'commit.h' for functions which already exist in 'shallow.c'. We will bring the remaining shallow-related functions defined in 'commit.c' in a subsequent patch. For now, move only the ones that already are implemented in 'shallow.c', and update the necessary includes. Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin.h | 1 + commit.c | 1 + commit.h | 48 --------------------------------------- fetch-pack.c | 1 + send-pack.c | 1 + shallow.c | 1 + shallow.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ upload-pack.c | 1 + 8 files changed, 69 insertions(+), 48 deletions(-) create mode 100644 shallow.h