[PATCH v3 0/3] rev-list: add support for commits in `--missing`
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Oct 19, 2023, 12:10 UTC
- Message-ID
- <20231019121024.194317-1-karthik.188@gmail.com>
- In-Reply-To
- <20231016103830.56486-1-karthik.188@gmail.com>
The `--missing` option in git-rev-list(1) was introduced intitally to deal with missing blobs in the context of promissory notes. Eventually the option was extended to also support tree objects in 7c0fe330d5 (rev-list: handle missing tree objects properly,2018-10-05).
This patch series extends the `--missing` option to also add support for commit objects. We do this by introducing a new flag `MISSING` which is added whenever we encounter a missing commit during traversal. Then in `builtin/rev-list` we check for this flag and take the appropriate action based on the `--missing=*` option used.
This series is an alternate to the patch series I had posted earlier: https://lore.kernel.org/git/20230908174208.249184-1-karthik.188@gmail.com/. In that patch, we introduced an option `--ignore-missing-links` which was added to expose the `ignore_missing_links` bit to the user. The issue in that patch was that, the option `--ignore-missing-links` didn't play well the pre-existing `--missing` option. This series avoids that route and just extends the `--missing` option for commits to solve the same problem.
V2 of the series can be found here: http://public-inbox.org/git/ZSkCGS3JPEQ71dOF@tanuki/T/#m10b562ec02834d0b222835a24a18e6ca725f99d1
Changes from v2:
* Change the flag MISSING's bit number to avoid collision with NEEDS_BITMAP which was causing t5310 and t532 to fail.
Range diff from v2:
1: a7018a319a = 1: fa35cd21e6 revision: rename bit to `do_not_die_on_missing_objects`
2: b186a679d4 = 2: 31074df376 rev-list: move `show_commit()` to the bottom
3: 0c8c140c27 ! 3: d9b0d6da0c rev-list: add commit object support in `--missing` option
@@ object.h: void object_array_init(struct object_array *array);
/*
* object flag allocation:
- * revision.h: 0---------10 15 23------27
-+ * revision.h: 0---------10 15 22------27
++ * revision.h: 0---------10 15 22------28
* fetch-pack.c: 01 67
* negotiator/default.c: 2--5
* walker.c: 0-2
+@@ object.h: void object_array_init(struct object_array *array);
+ * builtin/show-branch.c: 0-------------------------------------------26
+ * builtin/unpack-objects.c: 2021
+ */
+-#define FLAG_BITS 28
++#define FLAG_BITS 29
+
+ #define TYPE_BITS 3
+
## revision.c ##
@@ revision.c: static int process_parents(struct rev_info *revs, struct commit *commit,
@@ revision.c: static int process_parents(struct rev_info *revs, struct commit *com
unsigned pass_flags;
- if (commit->object.flags & ADDED)
-+ if (commit->object.flags & ADDED || commit->object.flags & MISSING)
++ if (commit->object.flags & (ADDED | MISSING))
return 0;
commit->object.flags |= ADDED;
@@ revision.c: static int process_parents(struct rev_info *revs, struct commit *com
## revision.h ##
@@
- /* WARNING: This is also used as REACHABLE in commit-graph.c. */
- #define PULL_MERGE (1u<<15)
+ #define ANCESTRY_PATH (1u<<27)
+ #define ALL_REV_FLAGS (((1u<<11)-1) | NOT_USER_GIVEN | TRACK_LINEAR | PULL_MERGE)
-+/* WARNING: This is also used as NEEDS_BITMAP in pack-bitmap.c. */
-+#define MISSING (1u<<22)
++#define MISSING (1u<<28)
+
- #define TOPO_WALK_EXPLORED (1u<<23)
- #define TOPO_WALK_INDEGREE (1u<<24)
+ #define DECORATE_SHORT_REFS 1
+ #define DECORATE_FULL_REFS 2
## t/t6022-rev-list-missing.sh (new) ##Karthik Nayak (3): revision: rename bit to `do_not_die_on_missing_objects` rev-list: move `show_commit()` to the bottom rev-list: add commit object support in `--missing` option
builtin/reflog.c | 2 +- builtin/rev-list.c | 93 +++++++++++++++++++------------------ list-objects.c | 4 +- object.h | 4 +- revision.c | 11 +++-- revision.h | 19 ++++---- t/t6022-rev-list-missing.sh | 74 +++++++++++++++++++++++++++++ 7 files changed, 147 insertions(+), 60 deletions(-) create mode 100755 t/t6022-rev-list-missing.sh
-- 2.42.0