aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bisect.c11
-rw-r--r--builtin/log.c50
-rw-r--r--builtin/merge-base.c4
-rw-r--r--commit-reach.c75
-rw-r--r--commit-reach.h10
-rw-r--r--commit.c4
-rw-r--r--commit.h2
-rwxr-xr-xgit-submodule.sh216
-rw-r--r--meson.build51
-rw-r--r--meson_options.txt8
-rw-r--r--object-file.c6
-rw-r--r--parse-options.c43
-rw-r--r--prio-queue.h4
-rw-r--r--ref-filter.c2
-rw-r--r--remote.c4
-rw-r--r--shallow.c40
-rw-r--r--shallow.h6
-rw-r--r--t/helper/test-reach.c6
18 files changed, 305 insertions, 237 deletions
diff --git a/bisect.c b/bisect.c
index 1a9069c9ad..7a3c77c6d8 100644
--- a/bisect.c
+++ b/bisect.c
@@ -780,10 +780,10 @@ static struct commit *get_commit_reference(struct repository *r,
}
static struct commit **get_bad_and_good_commits(struct repository *r,
- int *rev_nr)
+ size_t *rev_nr)
{
struct commit **rev;
- int i, n = 0;
+ size_t i, n = 0;
ALLOC_ARRAY(rev, 1 + good_revs.nr);
rev[n++] = get_commit_reference(r, current_bad_oid);
@@ -855,7 +855,7 @@ static void handle_skipped_merge_base(const struct object_id *mb)
* for early success, this will be converted back to 0 in
* check_good_are_ancestors_of_bad().
*/
-static enum bisect_error check_merge_bases(int rev_nr, struct commit **rev, int no_checkout)
+static enum bisect_error check_merge_bases(size_t rev_nr, struct commit **rev, int no_checkout)
{
enum bisect_error res = BISECT_OK;
struct commit_list *result = NULL;
@@ -887,7 +887,7 @@ static enum bisect_error check_merge_bases(int rev_nr, struct commit **rev, int
return res;
}
-static int check_ancestors(struct repository *r, int rev_nr,
+static int check_ancestors(struct repository *r, size_t rev_nr,
struct commit **rev, const char *prefix)
{
struct strvec rev_argv = STRVEC_INIT;
@@ -922,7 +922,8 @@ static enum bisect_error check_good_are_ancestors_of_bad(struct repository *r,
{
char *filename;
struct stat st;
- int fd, rev_nr;
+ int fd;
+ size_t rev_nr;
enum bisect_error res = BISECT_OK;
struct commit **rev;
diff --git a/builtin/log.c b/builtin/log.c
index 75e1b34123..a4f41aafca 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -6,7 +6,6 @@
*/
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "builtin.h"
#include "abspath.h"
@@ -209,7 +208,6 @@ static void cmd_log_init_defaults(struct rev_info *rev,
static void set_default_decoration_filter(struct decoration_filter *decoration_filter)
{
- int i;
char *value = NULL;
struct string_list *include = decoration_filter->include_ref_pattern;
const struct string_list *config_exclude;
@@ -243,7 +241,7 @@ static void set_default_decoration_filter(struct decoration_filter *decoration_f
* No command-line or config options were given, so
* populate with sensible defaults.
*/
- for (i = 0; i < ARRAY_SIZE(ref_namespace); i++) {
+ for (size_t i = 0; i < ARRAY_SIZE(ref_namespace); i++) {
if (!ref_namespace[i].decoration)
continue;
@@ -717,14 +715,14 @@ static int show_tag_object(const struct object_id *oid, struct rev_info *rev)
unsigned long size;
enum object_type type;
char *buf = repo_read_object_file(the_repository, oid, &type, &size);
- int offset = 0;
+ unsigned long offset = 0;
if (!buf)
return error(_("could not read object %s"), oid_to_hex(oid));
assert(type == OBJ_TAG);
while (offset < size && buf[offset] != '\n') {
- int new_offset = offset + 1;
+ unsigned long new_offset = offset + 1;
const char *ident;
while (new_offset < size && buf[new_offset++] != '\n')
; /* do nothing */
@@ -1316,24 +1314,25 @@ static void print_signature(const char *signature, FILE *file)
static char *find_branch_name(struct rev_info *rev)
{
- int i, positive = -1;
struct object_id branch_oid;
const struct object_id *tip_oid;
const char *ref, *v;
char *full_ref, *branch = NULL;
+ int interesting_found = 0;
+ size_t idx;
- for (i = 0; i < rev->cmdline.nr; i++) {
+ for (size_t i = 0; i < rev->cmdline.nr; i++) {
if (rev->cmdline.rev[i].flags & UNINTERESTING)
continue;
- if (positive < 0)
- positive = i;
- else
+ if (interesting_found)
return NULL;
+ interesting_found = 1;
+ idx = i;
}
- if (positive < 0)
+ if (!interesting_found)
return NULL;
- ref = rev->cmdline.rev[positive].name;
- tip_oid = &rev->cmdline.rev[positive].item->oid;
+ ref = rev->cmdline.rev[idx].name;
+ tip_oid = &rev->cmdline.rev[idx].item->oid;
if (repo_dwim_ref(the_repository, ref, strlen(ref), &branch_oid,
&full_ref, 0) &&
skip_prefix(full_ref, "refs/heads/", &v) &&
@@ -1746,11 +1745,12 @@ struct base_tree_info {
static struct commit *get_base_commit(const struct format_config *cfg,
struct commit **list,
- int total)
+ size_t total)
{
struct commit *base = NULL;
struct commit **rev;
- int i = 0, rev_nr = 0, auto_select, die_on_failure, ret;
+ int auto_select, die_on_failure, ret;
+ size_t i = 0, rev_nr = 0;
switch (cfg->auto_base) {
case AUTO_BASE_NEVER:
@@ -1885,13 +1885,12 @@ define_commit_slab(commit_base, int);
static void prepare_bases(struct base_tree_info *bases,
struct commit *base,
struct commit **list,
- int total)
+ size_t total)
{
struct commit *commit;
struct rev_info revs;
struct diff_options diffopt;
struct commit_base commit_base;
- int i;
if (!base)
return;
@@ -1906,7 +1905,7 @@ static void prepare_bases(struct base_tree_info *bases,
repo_init_revisions(the_repository, &revs, NULL);
revs.max_parents = 1;
revs.topo_order = 1;
- for (i = 0; i < total; i++) {
+ for (size_t i = 0; i < total; i++) {
list[i]->object.flags &= ~UNINTERESTING;
add_pending_object(&revs, &list[i]->object, "rev_list");
*commit_base_at(&commit_base, list[i]) = 1;
@@ -2007,7 +2006,7 @@ int cmd_format_patch(int argc,
struct rev_info rev;
char *to_free = NULL;
struct setup_revision_opt s_r_opt;
- int nr = 0, total, i;
+ size_t nr = 0, total, i;
int use_stdout = 0;
int start_number = -1;
int just_numbers = 0;
@@ -2183,7 +2182,7 @@ int cmd_format_patch(int argc,
fmt_patch_suffix = cfg.fmt_patch_suffix;
/* Make sure "0000-$sub.patch" gives non-negative length for $sub */
- if (cfg.log.fmt_patch_name_max <= strlen("0000-") + strlen(fmt_patch_suffix))
+ if (cfg.log.fmt_patch_name_max <= cast_size_t_to_int(strlen("0000-") + strlen(fmt_patch_suffix)))
cfg.log.fmt_patch_name_max = strlen("0000-") + strlen(fmt_patch_suffix);
if (cover_from_description_arg)
@@ -2500,11 +2499,14 @@ int cmd_format_patch(int argc,
if (show_progress)
progress = start_delayed_progress(_("Generating patches"), total);
- while (0 <= --nr) {
+ for (i = 0; i < nr; i++) {
+ size_t idx = nr - i - 1;
int shown;
- display_progress(progress, total - nr);
- commit = list[nr];
- rev.nr = total - nr + (start_number - 1);
+
+ display_progress(progress, total - idx);
+ commit = list[idx];
+ rev.nr = total - idx + (start_number - 1);
+
/* Make the second and subsequent mails replies to the first */
if (cfg.thread) {
/* Have we already had a message ID? */
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index a20c93b11a..123c81515e 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -8,7 +8,7 @@
#include "parse-options.h"
#include "commit-reach.h"
-static int show_merge_base(struct commit **rev, int rev_nr, int show_all)
+static int show_merge_base(struct commit **rev, size_t rev_nr, int show_all)
{
struct commit_list *result = NULL, *r;
@@ -149,7 +149,7 @@ int cmd_merge_base(int argc,
struct repository *repo UNUSED)
{
struct commit **rev;
- int rev_nr = 0;
+ size_t rev_nr = 0;
int show_all = 0;
int cmdmode = 0;
int ret;
diff --git a/commit-reach.c b/commit-reach.c
index e3edd11995..a339e41aa4 100644
--- a/commit-reach.c
+++ b/commit-reach.c
@@ -1,5 +1,4 @@
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "commit.h"
@@ -42,8 +41,7 @@ static int compare_commits_by_gen(const void *_a, const void *_b)
static int queue_has_nonstale(struct prio_queue *queue)
{
- int i;
- for (i = 0; i < queue->nr; i++) {
+ for (size_t i = 0; i < queue->nr; i++) {
struct commit *commit = queue->array[i].data;
if (!(commit->object.flags & STALE))
return 1;
@@ -213,12 +211,13 @@ int get_octopus_merge_bases(struct commit_list *in, struct commit_list **result)
}
static int remove_redundant_no_gen(struct repository *r,
- struct commit **array, int cnt)
+ struct commit **array,
+ size_t cnt, size_t *dedup_cnt)
{
struct commit **work;
unsigned char *redundant;
- int *filled_index;
- int i, j, filled;
+ size_t *filled_index;
+ size_t i, j, filled;
CALLOC_ARRAY(work, cnt);
redundant = xcalloc(cnt, 1);
@@ -268,20 +267,22 @@ static int remove_redundant_no_gen(struct repository *r,
for (i = filled = 0; i < cnt; i++)
if (!redundant[i])
array[filled++] = work[i];
+ *dedup_cnt = filled;
free(work);
free(redundant);
free(filled_index);
- return filled;
+ return 0;
}
static int remove_redundant_with_gen(struct repository *r,
- struct commit **array, int cnt)
+ struct commit **array, size_t cnt,
+ size_t *dedup_cnt)
{
- int i, count_non_stale = 0, count_still_independent = cnt;
+ size_t i, count_non_stale = 0, count_still_independent = cnt;
timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
struct commit **walk_start, **sorted;
size_t walk_start_nr = 0, walk_start_alloc = cnt;
- int min_gen_pos = 0;
+ size_t min_gen_pos = 0;
/*
* Sort the input by generation number, ascending. This allows
@@ -327,12 +328,12 @@ static int remove_redundant_with_gen(struct repository *r,
* terminate early. Otherwise, we will do the same amount of work
* as before.
*/
- for (i = walk_start_nr - 1; i >= 0 && count_still_independent > 1; i--) {
+ for (i = walk_start_nr; i && count_still_independent > 1; i--) {
/* push the STALE bits up to min generation */
struct commit_list *stack = NULL;
- commit_list_insert(walk_start[i], &stack);
- walk_start[i]->object.flags |= STALE;
+ commit_list_insert(walk_start[i - 1], &stack);
+ walk_start[i - 1]->object.flags |= STALE;
while (stack) {
struct commit_list *parents;
@@ -389,10 +390,12 @@ static int remove_redundant_with_gen(struct repository *r,
clear_commit_marks_many(walk_start_nr, walk_start, STALE);
free(walk_start);
- return count_non_stale;
+ *dedup_cnt = count_non_stale;
+ return 0;
}
-static int remove_redundant(struct repository *r, struct commit **array, int cnt)
+static int remove_redundant(struct repository *r, struct commit **array,
+ size_t cnt, size_t *dedup_cnt)
{
/*
* Some commit in the array may be an ancestor of
@@ -402,31 +405,30 @@ static int remove_redundant(struct repository *r, struct commit **array, int cnt
* that number.
*/
if (generation_numbers_enabled(r)) {
- int i;
-
/*
* If we have a single commit with finite generation
* number, then the _with_gen algorithm is preferred.
*/
- for (i = 0; i < cnt; i++) {
+ for (size_t i = 0; i < cnt; i++) {
if (commit_graph_generation(array[i]) < GENERATION_NUMBER_INFINITY)
- return remove_redundant_with_gen(r, array, cnt);
+ return remove_redundant_with_gen(r, array, cnt, dedup_cnt);
}
}
- return remove_redundant_no_gen(r, array, cnt);
+ return remove_redundant_no_gen(r, array, cnt, dedup_cnt);
}
static int get_merge_bases_many_0(struct repository *r,
struct commit *one,
- int n,
+ size_t n,
struct commit **twos,
int cleanup,
struct commit_list **result)
{
struct commit_list *list;
struct commit **rslt;
- int cnt, i;
+ size_t cnt, i;
+ int ret;
if (merge_bases_many(r, one, n, twos, result) < 0)
return -1;
@@ -453,8 +455,8 @@ static int get_merge_bases_many_0(struct repository *r,
clear_commit_marks(one, all_flags);
clear_commit_marks_many(n, twos, all_flags);
- cnt = remove_redundant(r, rslt, cnt);
- if (cnt < 0) {
+ ret = remove_redundant(r, rslt, cnt, &cnt);
+ if (ret < 0) {
free(rslt);
return -1;
}
@@ -466,7 +468,7 @@ static int get_merge_bases_many_0(struct repository *r,
int repo_get_merge_bases_many(struct repository *r,
struct commit *one,
- int n,
+ size_t n,
struct commit **twos,
struct commit_list **result)
{
@@ -475,7 +477,7 @@ int repo_get_merge_bases_many(struct repository *r,
int repo_get_merge_bases_many_dirty(struct repository *r,
struct commit *one,
- int n,
+ size_t n,
struct commit **twos,
struct commit_list **result)
{
@@ -583,7 +585,8 @@ struct commit_list *reduce_heads(struct commit_list *heads)
struct commit_list *p;
struct commit_list *result = NULL, **tail = &result;
struct commit **array;
- int num_head, i;
+ size_t num_head, i;
+ int ret;
if (!heads)
return NULL;
@@ -604,11 +607,13 @@ struct commit_list *reduce_heads(struct commit_list *heads)
p->item->object.flags &= ~STALE;
}
}
- num_head = remove_redundant(the_repository, array, num_head);
- if (num_head < 0) {
+
+ ret = remove_redundant(the_repository, array, num_head, &num_head);
+ if (ret < 0) {
free(array);
return NULL;
}
+
for (i = 0; i < num_head; i++)
tail = &commit_list_insert(array[i], tail)->next;
free(array);
@@ -781,12 +786,12 @@ int commit_contains(struct ref_filter *filter, struct commit *commit,
int can_all_from_reach_with_flag(struct object_array *from,
unsigned int with_flag,
unsigned int assign_flag,
- time_t min_commit_date,
+ timestamp_t min_commit_date,
timestamp_t min_generation)
{
struct commit **list = NULL;
- int i;
- int nr_commits;
+ size_t i;
+ size_t nr_commits;
int result = 1;
ALLOC_ARRAY(list, from->nr);
@@ -884,9 +889,9 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
int cutoff_by_min_date)
{
struct object_array from_objs = OBJECT_ARRAY_INIT;
- time_t min_commit_date = cutoff_by_min_date ? from->item->date : 0;
struct commit_list *from_iter = from, *to_iter = to;
int result;
+ timestamp_t min_commit_date = cutoff_by_min_date ? from->item->date : 0;
timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
while (from_iter) {
@@ -938,8 +943,8 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
return result;
}
-struct commit_list *get_reachable_subset(struct commit **from, int nr_from,
- struct commit **to, int nr_to,
+struct commit_list *get_reachable_subset(struct commit **from, size_t nr_from,
+ struct commit **to, size_t nr_to,
unsigned int reachable_flag)
{
struct commit **item;
diff --git a/commit-reach.h b/commit-reach.h
index 9a745b7e17..6012402dfc 100644
--- a/commit-reach.h
+++ b/commit-reach.h
@@ -14,12 +14,12 @@ int repo_get_merge_bases(struct repository *r,
struct commit *rev2,
struct commit_list **result);
int repo_get_merge_bases_many(struct repository *r,
- struct commit *one, int n,
+ struct commit *one, size_t n,
struct commit **twos,
struct commit_list **result);
/* To be used only when object flags after this call no longer matter */
int repo_get_merge_bases_many_dirty(struct repository *r,
- struct commit *one, int n,
+ struct commit *one, size_t n,
struct commit **twos,
struct commit_list **result);
@@ -81,7 +81,7 @@ int commit_contains(struct ref_filter *filter, struct commit *commit,
int can_all_from_reach_with_flag(struct object_array *from,
unsigned int with_flag,
unsigned int assign_flag,
- time_t min_commit_date,
+ timestamp_t min_commit_date,
timestamp_t min_generation);
int can_all_from_reach(struct commit_list *from, struct commit_list *to,
int commit_date_cutoff);
@@ -95,8 +95,8 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
* This method uses the PARENT1 and PARENT2 flags during its operation,
* so be sure these flags are not set before calling the method.
*/
-struct commit_list *get_reachable_subset(struct commit **from, int nr_from,
- struct commit **to, int nr_to,
+struct commit_list *get_reachable_subset(struct commit **from, size_t nr_from,
+ struct commit **to, size_t nr_to,
unsigned int reachable_flag);
struct ahead_behind_count {
diff --git a/commit.c b/commit.c
index a127fe60c5..540660359d 100644
--- a/commit.c
+++ b/commit.c
@@ -778,11 +778,11 @@ static void clear_commit_marks_1(struct commit_list **plist,
}
}
-void clear_commit_marks_many(int nr, struct commit **commit, unsigned int mark)
+void clear_commit_marks_many(size_t nr, struct commit **commit, unsigned int mark)
{
struct commit_list *list = NULL;
- while (nr--) {
+ for (size_t i = 0; i < nr; i++) {
clear_commit_marks_1(&list, *commit, mark);
commit++;
}
diff --git a/commit.h b/commit.h
index 943e3d74b2..70c870dae4 100644
--- a/commit.h
+++ b/commit.h
@@ -210,7 +210,7 @@ struct commit *pop_most_recent_commit(struct commit_list **list,
struct commit *pop_commit(struct commit_list **stack);
void clear_commit_marks(struct commit *commit, unsigned int mark);
-void clear_commit_marks_many(int nr, struct commit **commit, unsigned int mark);
+void clear_commit_marks_many(size_t nr, struct commit **commit, unsigned int mark);
enum rev_sort_order {
diff --git a/git-submodule.sh b/git-submodule.sh
index 03c5a220a2..2999b31fad 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -40,11 +40,11 @@ init=
require_init=
files=
remote=
-nofetch=
+no_fetch=
rebase=
merge=
checkout=
-custom_name=
+name=
depth=
progress=
dissociate=
@@ -52,11 +52,10 @@ single_branch=
jobs=
recommend_shallow=
filter=
-
-isnumber()
-{
- n=$(($1 + 0)) 2>/dev/null && test "$n" = "$1"
-}
+all=
+default=
+summary_limit=
+for_status=
#
# Add a new submodule to the working tree, .gitmodules and the index
@@ -68,31 +67,33 @@ isnumber()
cmd_add()
{
# parse $args after "submodule ... add".
- reference_path=
while test $# -ne 0
do
case "$1" in
-b | --branch)
case "$2" in '') usage ;; esac
- branch=$2
+ branch="--branch=$2"
shift
;;
+ -b* | --branch=*)
+ branch="$1"
+ ;;
-f | --force)
force=$1
;;
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--progress)
- progress=1
+ progress=$1
;;
--reference)
case "$2" in '') usage ;; esac
- reference_path=$2
+ reference="--reference=$2"
shift
;;
--reference=*)
- reference_path="${1#--reference=}"
+ reference="$1"
;;
--ref-format)
case "$2" in '') usage ;; esac
@@ -103,20 +104,23 @@ cmd_add()
ref_format="$1"
;;
--dissociate)
- dissociate=1
+ dissociate=$1
;;
--name)
case "$2" in '') usage ;; esac
- custom_name=$2
+ name="--name=$2"
shift
;;
+ --name=*)
+ name="$1"
+ ;;
--depth)
case "$2" in '') usage ;; esac
depth="--depth=$2"
shift
;;
--depth=*)
- depth=$1
+ depth="$1"
;;
--)
shift
@@ -138,14 +142,14 @@ cmd_add()
fi
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper add \
- ${quiet:+--quiet} \
- ${force:+--force} \
- ${progress:+"--progress"} \
- ${branch:+--branch "$branch"} \
- ${reference_path:+--reference "$reference_path"} \
+ $quiet \
+ $force \
+ $progress \
+ ${branch:+"$branch"} \
+ ${reference:+"$reference"} \
${ref_format:+"$ref_format"} \
- ${dissociate:+--dissociate} \
- ${custom_name:+--name "$custom_name"} \
+ $dissociate \
+ ${name:+"$name"} \
${depth:+"$depth"} \
-- \
"$@"
@@ -164,10 +168,10 @@ cmd_foreach()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--recursive)
- recursive=1
+ recursive=$1
;;
-*)
usage
@@ -180,8 +184,8 @@ cmd_foreach()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper foreach \
- ${quiet:+--quiet} \
- ${recursive:+--recursive} \
+ $quiet \
+ $recursive \
-- \
"$@"
}
@@ -198,7 +202,7 @@ cmd_init()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--)
shift
@@ -215,7 +219,7 @@ cmd_init()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper init \
- ${quiet:+--quiet} \
+ $quiet \
-- \
"$@"
}
@@ -226,7 +230,6 @@ cmd_init()
cmd_deinit()
{
# parse $args after "submodule ... deinit".
- deinit_all=
while test $# -ne 0
do
case "$1" in
@@ -234,10 +237,10 @@ cmd_deinit()
force=$1
;;
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--all)
- deinit_all=t
+ all=$1
;;
--)
shift
@@ -254,9 +257,9 @@ cmd_deinit()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
- ${quiet:+--quiet} \
- ${force:+--force} \
- ${deinit_all:+--all} \
+ $quiet \
+ $force \
+ $all \
-- \
"$@"
}
@@ -273,31 +276,31 @@ cmd_update()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
-v|--verbose)
- quiet=0
+ quiet=
;;
--progress)
- progress=1
+ progress=$1
;;
-i|--init)
- init=1
+ init=$1
;;
--require-init)
- require_init=1
+ require_init=$1
;;
--remote)
- remote=1
+ remote=$1
;;
-N|--no-fetch)
- nofetch=1
+ no_fetch=$1
;;
-f|--force)
force=$1
;;
-r|--rebase)
- rebase=1
+ rebase=$1
;;
--ref-format)
case "$2" in '') usage ;; esac
@@ -316,22 +319,19 @@ cmd_update()
reference="$1"
;;
--dissociate)
- dissociate=1
+ dissociate=$1
;;
-m|--merge)
- merge=1
+ merge=$1
;;
--recursive)
- recursive=1
+ recursive=$1
;;
--checkout)
- checkout=1
- ;;
- --recommend-shallow)
- recommend_shallow="--recommend-shallow"
+ checkout=$1
;;
- --no-recommend-shallow)
- recommend_shallow="--no-recommend-shallow"
+ --recommend-shallow|--no-recommend-shallow)
+ recommend_shallow=$1
;;
--depth)
case "$2" in '') usage ;; esac
@@ -339,21 +339,18 @@ cmd_update()
shift
;;
--depth=*)
- depth=$1
+ depth="$1"
;;
-j|--jobs)
case "$2" in '') usage ;; esac
jobs="--jobs=$2"
shift
;;
- --jobs=*)
- jobs=$1
+ -j*|--jobs=*)
+ jobs="$1"
;;
- --single-branch)
- single_branch="--single-branch"
- ;;
- --no-single-branch)
- single_branch="--no-single-branch"
+ --single-branch|--no-single-branch)
+ single_branch=$1
;;
--filter)
case "$2" in '') usage ;; esac
@@ -378,22 +375,21 @@ cmd_update()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper update \
- ${quiet:+--quiet} \
- ${force:+--force} \
- ${progress:+"--progress"} \
- ${remote:+--remote} \
- ${recursive:+--recursive} \
- ${init:+--init} \
- ${nofetch:+--no-fetch} \
- ${rebase:+--rebase} \
- ${merge:+--merge} \
- ${checkout:+--checkout} \
+ $quiet \
+ $force \
+ $progress \
+ $remote \
+ $recursive \
+ $init \
+ $no_fetch \
+ $rebase \
+ $merge \
+ $checkout \
${ref_format:+"$ref_format"} \
${reference:+"$reference"} \
- ${dissociate:+"--dissociate"} \
+ $dissociate \
${depth:+"$depth"} \
- ${require_init:+--require-init} \
- ${dissociate:+"--dissociate"} \
+ $require_init \
$single_branch \
$recommend_shallow \
$jobs \
@@ -408,9 +404,7 @@ cmd_update()
# $@ = requested path
#
cmd_set_branch() {
- default=
- branch=
-
+ # parse $args after "submodule ... set-branch".
while test $# -ne 0
do
case "$1" in
@@ -418,13 +412,16 @@ cmd_set_branch() {
# we don't do anything with this but we need to accept it
;;
-d|--default)
- default=1
+ default=$1
;;
-b|--branch)
case "$2" in '') usage ;; esac
- branch=$2
+ branch="--branch=$2"
shift
;;
+ -b*|--branch=*)
+ branch="$1"
+ ;;
--)
shift
break
@@ -440,9 +437,9 @@ cmd_set_branch() {
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-branch \
- ${quiet:+--quiet} \
- ${branch:+--branch "$branch"} \
- ${default:+--default} \
+ $quiet \
+ ${branch:+"$branch"} \
+ $default \
-- \
"$@"
}
@@ -453,11 +450,12 @@ cmd_set_branch() {
# $@ = requested path, requested url
#
cmd_set_url() {
+ # parse $args after "submodule ... set-url".
while test $# -ne 0
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--)
shift
@@ -474,7 +472,7 @@ cmd_set_url() {
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-url \
- ${quiet:+--quiet} \
+ $quiet \
-- \
"$@"
}
@@ -488,31 +486,26 @@ cmd_set_url() {
# $@ = [commit (default 'HEAD'),] requested paths (default all)
#
cmd_summary() {
- summary_limit=-1
- for_status=
- diff_cmd=diff-index
-
# parse $args after "submodule ... summary".
while test $# -ne 0
do
case "$1" in
--cached)
- cached=1
+ cached=$1
;;
--files)
- files="$1"
+ files=$1
;;
--for-status)
- for_status="$1"
+ for_status=$1
;;
-n|--summary-limit)
- summary_limit="$2"
- isnumber "$summary_limit" || usage
+ case "$2" in '') usage ;; esac
+ summary_limit="--summary-limit=$2"
shift
;;
- --summary-limit=*)
- summary_limit="${1#--summary-limit=}"
- isnumber "$summary_limit" || usage
+ -n*|--summary-limit=*)
+ summary_limit="$1"
;;
--)
shift
@@ -529,10 +522,10 @@ cmd_summary() {
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper summary \
- ${files:+--files} \
- ${cached:+--cached} \
- ${for_status:+--for-status} \
- ${summary_limit:+-n $summary_limit} \
+ $files \
+ $cached \
+ $for_status \
+ ${summary_limit:+"$summary_limit"} \
-- \
"$@"
}
@@ -553,13 +546,13 @@ cmd_status()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--cached)
- cached=1
+ cached=$1
;;
--recursive)
- recursive=1
+ recursive=$1
;;
--)
shift
@@ -576,9 +569,9 @@ cmd_status()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper status \
- ${quiet:+--quiet} \
- ${cached:+--cached} \
- ${recursive:+--recursive} \
+ $quiet \
+ $cached \
+ $recursive \
-- \
"$@"
}
@@ -590,15 +583,16 @@ cmd_status()
#
cmd_sync()
{
+ # parse $args after "submodule ... sync".
while test $# -ne 0
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
shift
;;
--recursive)
- recursive=1
+ recursive=$1
shift
;;
--)
@@ -615,8 +609,8 @@ cmd_sync()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper sync \
- ${quiet:+--quiet} \
- ${recursive:+--recursive} \
+ $quiet \
+ $recursive \
-- \
"$@"
}
@@ -639,10 +633,10 @@ do
command=$1
;;
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--cached)
- cached=1
+ cached=$1
;;
--)
break
diff --git a/meson.build b/meson.build
index 0064eb64f5..7361eb2eaa 100644
--- a/meson.build
+++ b/meson.build
@@ -1326,14 +1326,17 @@ if not meson.is_cross_build() and fs.exists('/dev/tty')
endif
https_backend = get_option('https_backend')
+sha1_backend = get_option('sha1_backend')
+sha1_unsafe_backend = get_option('sha1_unsafe_backend')
+sha256_backend = get_option('sha256_backend')
-security_framework = dependency('Security', required: https_backend == 'CommonCrypto')
+security_framework = dependency('Security', required: 'CommonCrypto' in [https_backend, sha1_backend, sha1_unsafe_backend])
core_foundation_framework = dependency('CoreFoundation', required: security_framework.found())
if https_backend == 'auto' and security_framework.found()
https_backend = 'CommonCrypto'
endif
-openssl_required = https_backend == 'openssl' or get_option('sha1_backend') == 'openssl' or get_option('sha256_backend') == 'openssl'
+openssl_required = 'openssl' in [https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
openssl = dependency('openssl', required: openssl_required, default_options: ['default_library=static'])
if https_backend == 'auto' and openssl.found()
https_backend = 'openssl'
@@ -1354,7 +1357,6 @@ if https_backend != 'openssl'
libgit_c_args += '-DNO_OPENSSL'
endif
-sha1_backend = get_option('sha1_backend')
if sha1_backend == 'sha1dc'
libgit_c_args += '-DSHA1_DC'
libgit_c_args += '-DSHA1DC_NO_STANDARD_INCLUDES=1'
@@ -1367,22 +1369,40 @@ if sha1_backend == 'sha1dc'
'sha1dc/sha1.c',
'sha1dc/ubc_check.c',
]
-elif sha1_backend == 'common-crypto'
+endif
+if sha1_backend == 'CommonCrypto' or sha1_unsafe_backend == 'CommonCrypto'
+ if sha1_backend == 'CommonCrypto'
+ libgit_c_args += '-DSHA1_APPLE'
+ endif
+ if sha1_unsafe_backend == 'CommonCrypto'
+ libgit_c_args += '-DSHA1_APPLE_UNSAFE'
+ endif
+
libgit_c_args += '-DCOMMON_DIGEST_FOR_OPENSSL'
- libgit_c_args += '-DSHA1_APPLE'
# Apple CommonCrypto requires chunking
libgit_c_args += '-DSHA1_MAX_BLOCK_SIZE=1024L*1024L*1024L'
-elif sha1_backend == 'openssl'
- libgit_c_args += '-DSHA1_OPENSSL'
+endif
+if sha1_backend == 'openssl' or sha1_unsafe_backend == 'openssl'
+ if sha1_backend == 'openssl'
+ libgit_c_args += '-DSHA1_OPENSSL'
+ endif
+ if sha1_unsafe_backend == 'openssl'
+ libgit_c_args += '-DSHA1_OPENSSL_UNSAFE'
+ endif
+
libgit_dependencies += openssl
-elif sha1_backend == 'block'
- libgit_c_args += '-DSHA1_BLK'
+endif
+if sha1_backend == 'block' or sha1_unsafe_backend == 'block'
+ if sha1_backend == 'block'
+ libgit_c_args += '-DSHA1_BLK'
+ endif
+ if sha1_unsafe_backend == 'block'
+ libgit_c_args += '-DSHA1_BLK_UNSAFE'
+ endif
+
libgit_sources += 'block-sha1/sha1.c'
-else
- error('Unhandled SHA1 backend ' + sha1_backend)
endif
-sha256_backend = get_option('sha256_backend')
if sha256_backend == 'openssl'
libgit_c_args += '-DSHA256_OPENSSL'
libgit_dependencies += openssl
@@ -1923,3 +1943,10 @@ summary({
'perl': perl_features_enabled,
'python': python.found(),
}, section: 'Auto-detected features')
+
+summary({
+ 'https': https_backend,
+ 'sha1': sha1_backend,
+ 'sha1_unsafe': sha1_unsafe_backend,
+ 'sha256': sha256_backend,
+}, section: 'Backends')
diff --git a/meson_options.txt b/meson_options.txt
index 4be7eab399..8282b1dea8 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -49,10 +49,12 @@ option('regex', type: 'feature', value: 'auto',
# Backends.
option('https_backend', type: 'combo', value: 'auto', choices: ['auto', 'openssl', 'CommonCrypto', 'none'],
description: 'The HTTPS backend to use when connecting to remotes.')
-option('sha1_backend', type: 'combo', choices: ['openssl', 'block', 'sha1dc', 'common-crypto'], value: 'sha1dc',
- description: 'The backend used for hashing objects with the SHA1 object format')
+option('sha1_backend', type: 'combo', choices: ['openssl', 'block', 'sha1dc', 'CommonCrypto'], value: 'sha1dc',
+ description: 'The backend used for hashing objects with the SHA1 object format.')
+option('sha1_unsafe_backend', type: 'combo', choices: ['openssl', 'block', 'CommonCrypto', 'none'], value: 'none',
+ description: 'The backend used for hashing data with the SHA1 object format in case no cryptographic security is needed.')
option('sha256_backend', type: 'combo', choices: ['openssl', 'nettle', 'gcrypt', 'block'], value: 'block',
- description: 'The backend used for hashing objects with the SHA256 object format')
+ description: 'The backend used for hashing objects with the SHA256 object format.')
# Build tweaks.
option('macos_use_homebrew_gettext', type: 'boolean', value: true,
diff --git a/object-file.c b/object-file.c
index 5b792b3dd4..f84dcd2f2a 100644
--- a/object-file.c
+++ b/object-file.c
@@ -1978,13 +1978,15 @@ static int check_collision(const char *filename_a, const char *filename_b)
fd_a = open(filename_a, O_RDONLY);
if (fd_a < 0) {
- ret = error_errno(_("unable to open %s"), filename_a);
+ if (errno != ENOENT)
+ ret = error_errno(_("unable to open %s"), filename_a);
goto out;
}
fd_b = open(filename_b, O_RDONLY);
if (fd_b < 0) {
- ret = error_errno(_("unable to open %s"), filename_b);
+ if (errno != ENOENT)
+ ret = error_errno(_("unable to open %s"), filename_b);
goto out;
}
diff --git a/parse-options.c b/parse-options.c
index 33bfba0ed4..3ff6a5d1fa 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -1076,11 +1076,48 @@ static int usage_argh(const struct option *opts, FILE *outfile)
!opts->argh || !!strpbrk(opts->argh, "()<>[]|");
if (opts->flags & PARSE_OPT_OPTARG)
if (opts->long_name)
- s = literal ? "[=%s]" : "[=<%s>]";
+ /*
+ * TRANSLATORS: The "<%s>" part of this string
+ * stands for an optional value given to a command
+ * line option in the long form, and "<>" is there
+ * as a convention to signal that it is a
+ * placeholder (i.e. the user should substitute it
+ * with the real value). If your language uses a
+ * different convention, you can change "<%s>" part
+ * to match yours, e.g. it might use "|%s|" instead,
+ * or if the alphabet is different enough it may use
+ * "%s" without any placeholder signal. Most
+ * translations leave this message as is.
+ */
+ s = literal ? "[=%s]" : _("[=<%s>]");
else
- s = literal ? "[%s]" : "[<%s>]";
+ /*
+ * TRANSLATORS: The "<%s>" part of this string
+ * stands for an optional value given to a command
+ * line option in the short form, and "<>" is there
+ * as a convention to signal that it is a
+ * placeholder (i.e. the user should substitute it
+ * with the real value). If your language uses a
+ * different convention, you can change "<%s>" part
+ * to match yours, e.g. it might use "|%s|" instead,
+ * or if the alphabet is different enough it may use
+ * "%s" without any placeholder signal. Most
+ * translations leave this message as is.
+ */
+ s = literal ? "[%s]" : _("[<%s>]");
else
- s = literal ? " %s" : " <%s>";
+ /*
+ * TRANSLATORS: The "<%s>" part of this string stands for a
+ * value given to a command line option, and "<>" is there
+ * as a convention to signal that it is a placeholder
+ * (i.e. the user should substitute it with the real value).
+ * If your language uses a different convention, you can
+ * change "<%s>" part to match yours, e.g. it might use
+ * "|%s|" instead, or if the alphabet is different enough it
+ * may use "%s" without any placeholder signal. Most
+ * translations leave this message as is.
+ */
+ s = literal ? " %s" : _(" <%s>");
return utf8_fprintf(outfile, s, opts->argh ? _(opts->argh) : _("..."));
}
diff --git a/prio-queue.h b/prio-queue.h
index 36f370625f..38d032636d 100644
--- a/prio-queue.h
+++ b/prio-queue.h
@@ -22,13 +22,13 @@
typedef int (*prio_queue_compare_fn)(const void *one, const void *two, void *cb_data);
struct prio_queue_entry {
- unsigned ctr;
+ size_t ctr;
void *data;
};
struct prio_queue {
prio_queue_compare_fn compare;
- unsigned insertion_ctr;
+ size_t insertion_ctr;
void *cb_data;
size_t alloc, nr;
struct prio_queue_entry *array;
diff --git a/ref-filter.c b/ref-filter.c
index 23054694c2..bf5534605e 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -3041,7 +3041,7 @@ static void reach_filter(struct ref_array *array,
struct commit_list **check_reachable,
int include_reached)
{
- int i, old_nr;
+ size_t i, old_nr;
struct commit **to_clear;
if (!*check_reachable)
diff --git a/remote.c b/remote.c
index 18e5ccf391..0f6fba8562 100644
--- a/remote.c
+++ b/remote.c
@@ -1535,7 +1535,7 @@ static struct ref **tail_ref(struct ref **head)
struct tips {
struct commit **tip;
- int nr, alloc;
+ size_t nr, alloc;
};
static void add_to_tips(struct tips *tips, const struct object_id *oid)
@@ -1602,7 +1602,7 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds
const int reachable_flag = 1;
struct commit_list *found_commits;
struct commit **src_commits;
- int nr_src_commits = 0, alloc_src_commits = 16;
+ size_t nr_src_commits = 0, alloc_src_commits = 16;
ALLOC_ARRAY(src_commits, alloc_src_commits);
for_each_string_list_item(item, &src_tag) {
diff --git a/shallow.c b/shallow.c
index 82a8da3d73..b54244ffa9 100644
--- a/shallow.c
+++ b/shallow.c
@@ -1,5 +1,4 @@
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "hex.h"
@@ -134,7 +133,8 @@ static void free_depth_in_slab(int **ptr)
struct commit_list *get_shallow_commits(struct object_array *heads, int depth,
int shallow_flag, int not_shallow_flag)
{
- int i = 0, cur_depth = 0;
+ size_t i = 0;
+ int cur_depth = 0;
struct commit_list *result = NULL;
struct object_array stack = OBJECT_ARRAY_INIT;
struct commit *commit = NULL;
@@ -335,16 +335,16 @@ static int write_shallow_commits_1(struct strbuf *out, int use_pack_protocol,
const struct oid_array *extra,
unsigned flags)
{
- struct write_shallow_data data;
- int i;
- data.out = out;
- data.use_pack_protocol = use_pack_protocol;
- data.count = 0;
- data.flags = flags;
+ struct write_shallow_data data = {
+ .out = out,
+ .use_pack_protocol = use_pack_protocol,
+ .flags = flags,
+ };
+
for_each_commit_graft(write_one_shallow, &data);
if (!extra)
return data.count;
- for (i = 0; i < extra->nr; i++) {
+ for (size_t i = 0; i < extra->nr; i++) {
strbuf_addstr(out, oid_to_hex(extra->oid + i));
strbuf_addch(out, '\n');
data.count++;
@@ -466,7 +466,6 @@ struct trace_key trace_shallow = TRACE_KEY_INIT(SHALLOW);
*/
void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)
{
- int i;
trace_printf_key(&trace_shallow, "shallow: prepare_shallow_info\n");
memset(info, 0, sizeof(*info));
info->shallow = sa;
@@ -474,7 +473,7 @@ void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)
return;
ALLOC_ARRAY(info->ours, sa->nr);
ALLOC_ARRAY(info->theirs, sa->nr);
- for (i = 0; i < sa->nr; i++) {
+ for (size_t i = 0; i < sa->nr; i++) {
if (repo_has_object_file(the_repository, sa->oid + i)) {
struct commit_graft *graft;
graft = lookup_commit_graft(the_repository,
@@ -507,7 +506,7 @@ void clear_shallow_info(struct shallow_info *info)
void remove_nonexistent_theirs_shallow(struct shallow_info *info)
{
struct object_id *oid = info->shallow->oid;
- int i, dst;
+ size_t i, dst;
trace_printf_key(&trace_shallow, "shallow: remove_nonexistent_theirs_shallow\n");
for (i = dst = 0; i < info->nr_theirs; i++) {
if (i != dst)
@@ -535,7 +534,7 @@ static uint32_t *paint_alloc(struct paint_info *info)
unsigned nr = DIV_ROUND_UP(info->nr_bits, 32);
unsigned size = nr * sizeof(uint32_t);
void *p;
- if (!info->pool_count || size > info->end - info->free) {
+ if (!info->pool_count || info->end < info->free + size) {
if (size > POOL_SIZE)
BUG("pool size too small for %d in paint_alloc()",
size);
@@ -560,7 +559,7 @@ static void paint_down(struct paint_info *info, const struct object_id *oid,
{
unsigned int i, nr;
struct commit_list *head = NULL;
- int bitmap_nr = DIV_ROUND_UP(info->nr_bits, 32);
+ size_t bitmap_nr = DIV_ROUND_UP(info->nr_bits, 32);
size_t bitmap_size = st_mult(sizeof(uint32_t), bitmap_nr);
struct commit *c = lookup_commit_reference_gently(the_repository, oid,
1);
@@ -660,7 +659,7 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,
struct object_id *oid = info->shallow->oid;
struct oid_array *ref = info->ref;
unsigned int i, nr;
- int *shallow, nr_shallow = 0;
+ size_t *shallow, nr_shallow = 0;
struct paint_info pi;
trace_printf_key(&trace_shallow, "shallow: assign_shallow_commits_to_refs\n");
@@ -735,7 +734,7 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,
struct commit_array {
struct commit **commits;
- int nr, alloc;
+ size_t nr, alloc;
};
static int add_ref(const char *refname UNUSED,
@@ -753,12 +752,11 @@ static int add_ref(const char *refname UNUSED,
return 0;
}
-static void update_refstatus(int *ref_status, int nr, uint32_t *bitmap)
+static void update_refstatus(int *ref_status, size_t nr, uint32_t *bitmap)
{
- unsigned int i;
if (!ref_status)
return;
- for (i = 0; i < nr; i++)
+ for (size_t i = 0; i < nr; i++)
if (bitmap[i / 32] & (1U << (i % 32)))
ref_status[i]++;
}
@@ -773,8 +771,8 @@ static void post_assign_shallow(struct shallow_info *info,
struct object_id *oid = info->shallow->oid;
struct commit *c;
uint32_t **bitmap;
- int dst, i, j;
- int bitmap_nr = DIV_ROUND_UP(info->ref->nr, 32);
+ size_t dst, i, j;
+ size_t bitmap_nr = DIV_ROUND_UP(info->ref->nr, 32);
struct commit_array ca;
trace_printf_key(&trace_shallow, "shallow: post_assign_shallow\n");
diff --git a/shallow.h b/shallow.h
index e9ca7e4bc8..9bfeade93e 100644
--- a/shallow.h
+++ b/shallow.h
@@ -59,8 +59,8 @@ void prune_shallow(unsigned options);
*/
struct shallow_info {
struct oid_array *shallow;
- int *ours, nr_ours;
- int *theirs, nr_theirs;
+ size_t *ours, nr_ours;
+ size_t *theirs, nr_theirs;
struct oid_array *ref;
/* for receive-pack */
@@ -69,7 +69,7 @@ struct shallow_info {
int *reachable;
int *shallow_ref;
struct commit **commits;
- int nr_commits;
+ size_t nr_commits;
};
void prepare_shallow_info(struct shallow_info *, struct oid_array *);
diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c
index 01cf77ae65..028ec00306 100644
--- a/t/helper/test-reach.c
+++ b/t/helper/test-reach.c
@@ -35,7 +35,7 @@ int cmd__reach(int ac, const char **av)
struct commit_list *X, *Y;
struct object_array X_obj = OBJECT_ARRAY_INIT;
struct commit **X_array, **Y_array;
- int X_nr, X_alloc, Y_nr, Y_alloc;
+ size_t X_nr, X_alloc, Y_nr, Y_alloc;
struct strbuf buf = STRBUF_INIT;
struct repository *r = the_repository;
@@ -157,7 +157,7 @@ int cmd__reach(int ac, const char **av)
clear_contains_cache(&cache);
} else if (!strcmp(av[1], "get_reachable_subset")) {
const int reachable_flag = 1;
- int i, count = 0;
+ int count = 0;
struct commit_list *current;
struct commit_list *list = get_reachable_subset(X_array, X_nr,
Y_array, Y_nr,
@@ -169,7 +169,7 @@ int cmd__reach(int ac, const char **av)
oid_to_hex(&list->item->object.oid));
count++;
}
- for (i = 0; i < Y_nr; i++) {
+ for (size_t i = 0; i < Y_nr; i++) {
if (Y_array[i]->object.flags & reachable_flag)
count--;
}