Merge branch 'jk/misc-unused-fixes'
Assorted fixes for bugs found while auditing -Wunused-parameter warnings. * jk/misc-unused-fixes: approxidate: fix NULL dereference in date_time() pathspec: handle non-terminated strings with :(attr) approxidate: handle pending number for "specials" rev-list: handle flags for --indexed-objects
This commit is contained in:
commit
f22838aa7a
62
date.c
62
date.c
@ -887,20 +887,49 @@ static time_t update_tm(struct tm *tm, struct tm *now, time_t sec)
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do we have a pending number at the end, or when
|
||||
* we see a new one? Let's assume it's a month day,
|
||||
* as in "Dec 6, 1992"
|
||||
*/
|
||||
static void pending_number(struct tm *tm, int *num)
|
||||
{
|
||||
int number = *num;
|
||||
|
||||
if (number) {
|
||||
*num = 0;
|
||||
if (tm->tm_mday < 0 && number < 32)
|
||||
tm->tm_mday = number;
|
||||
else if (tm->tm_mon < 0 && number < 13)
|
||||
tm->tm_mon = number-1;
|
||||
else if (tm->tm_year < 0) {
|
||||
if (number > 1969 && number < 2100)
|
||||
tm->tm_year = number - 1900;
|
||||
else if (number > 69 && number < 100)
|
||||
tm->tm_year = number;
|
||||
else if (number < 38)
|
||||
tm->tm_year = 100 + number;
|
||||
/* We screw up for number = 00 ? */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void date_now(struct tm *tm, struct tm *now, int *num)
|
||||
{
|
||||
*num = 0;
|
||||
update_tm(tm, now, 0);
|
||||
}
|
||||
|
||||
static void date_yesterday(struct tm *tm, struct tm *now, int *num)
|
||||
{
|
||||
*num = 0;
|
||||
update_tm(tm, now, 24*60*60);
|
||||
}
|
||||
|
||||
static void date_time(struct tm *tm, struct tm *now, int hour)
|
||||
{
|
||||
if (tm->tm_hour < hour)
|
||||
date_yesterday(tm, now, NULL);
|
||||
update_tm(tm, now, 24*60*60);
|
||||
tm->tm_hour = hour;
|
||||
tm->tm_min = 0;
|
||||
tm->tm_sec = 0;
|
||||
@ -908,16 +937,19 @@ static void date_time(struct tm *tm, struct tm *now, int hour)
|
||||
|
||||
static void date_midnight(struct tm *tm, struct tm *now, int *num)
|
||||
{
|
||||
pending_number(tm, num);
|
||||
date_time(tm, now, 0);
|
||||
}
|
||||
|
||||
static void date_noon(struct tm *tm, struct tm *now, int *num)
|
||||
{
|
||||
pending_number(tm, num);
|
||||
date_time(tm, now, 12);
|
||||
}
|
||||
|
||||
static void date_tea(struct tm *tm, struct tm *now, int *num)
|
||||
{
|
||||
pending_number(tm, num);
|
||||
date_time(tm, now, 17);
|
||||
}
|
||||
|
||||
@ -953,6 +985,7 @@ static void date_never(struct tm *tm, struct tm *now, int *num)
|
||||
{
|
||||
time_t n = 0;
|
||||
localtime_r(&n, tm);
|
||||
*num = 0;
|
||||
}
|
||||
|
||||
static const struct special {
|
||||
@ -1110,33 +1143,6 @@ static const char *approxidate_digit(const char *date, struct tm *tm, int *num,
|
||||
return end;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do we have a pending number at the end, or when
|
||||
* we see a new one? Let's assume it's a month day,
|
||||
* as in "Dec 6, 1992"
|
||||
*/
|
||||
static void pending_number(struct tm *tm, int *num)
|
||||
{
|
||||
int number = *num;
|
||||
|
||||
if (number) {
|
||||
*num = 0;
|
||||
if (tm->tm_mday < 0 && number < 32)
|
||||
tm->tm_mday = number;
|
||||
else if (tm->tm_mon < 0 && number < 13)
|
||||
tm->tm_mon = number-1;
|
||||
else if (tm->tm_year < 0) {
|
||||
if (number > 1969 && number < 2100)
|
||||
tm->tm_year = number - 1900;
|
||||
else if (number > 69 && number < 100)
|
||||
tm->tm_year = number;
|
||||
else if (number < 38)
|
||||
tm->tm_year = 100 + number;
|
||||
/* We screw up for number = 00 ? */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static timestamp_t approxidate_str(const char *date,
|
||||
const struct timeval *tv,
|
||||
int *error_ret)
|
||||
|
7
dir.c
7
dir.c
@ -281,8 +281,15 @@ static int match_attrs(const struct index_state *istate,
|
||||
const struct pathspec_item *item)
|
||||
{
|
||||
int i;
|
||||
char *to_free = NULL;
|
||||
|
||||
if (name[namelen])
|
||||
name = to_free = xmemdupz(name, namelen);
|
||||
|
||||
git_check_attr(istate, name, item->attr_check);
|
||||
|
||||
free(to_free);
|
||||
|
||||
for (i = 0; i < item->attr_match_nr; i++) {
|
||||
const char *value;
|
||||
int matched;
|
||||
|
15
revision.c
15
revision.c
@ -1327,13 +1327,14 @@ void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)
|
||||
}
|
||||
|
||||
static void add_cache_tree(struct cache_tree *it, struct rev_info *revs,
|
||||
struct strbuf *path)
|
||||
struct strbuf *path, unsigned int flags)
|
||||
{
|
||||
size_t baselen = path->len;
|
||||
int i;
|
||||
|
||||
if (it->entry_count >= 0) {
|
||||
struct tree *tree = lookup_tree(revs->repo, &it->oid);
|
||||
tree->object.flags |= flags;
|
||||
add_pending_object_with_path(revs, &tree->object, "",
|
||||
040000, path->buf);
|
||||
}
|
||||
@ -1341,14 +1342,15 @@ static void add_cache_tree(struct cache_tree *it, struct rev_info *revs,
|
||||
for (i = 0; i < it->subtree_nr; i++) {
|
||||
struct cache_tree_sub *sub = it->down[i];
|
||||
strbuf_addf(path, "%s%s", baselen ? "/" : "", sub->name);
|
||||
add_cache_tree(sub->cache_tree, revs, path);
|
||||
add_cache_tree(sub->cache_tree, revs, path, flags);
|
||||
strbuf_setlen(path, baselen);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void do_add_index_objects_to_pending(struct rev_info *revs,
|
||||
struct index_state *istate)
|
||||
struct index_state *istate,
|
||||
unsigned int flags)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1362,13 +1364,14 @@ static void do_add_index_objects_to_pending(struct rev_info *revs,
|
||||
blob = lookup_blob(revs->repo, &ce->oid);
|
||||
if (!blob)
|
||||
die("unable to add index blob to traversal");
|
||||
blob->object.flags |= flags;
|
||||
add_pending_object_with_path(revs, &blob->object, "",
|
||||
ce->ce_mode, ce->name);
|
||||
}
|
||||
|
||||
if (istate->cache_tree) {
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
add_cache_tree(istate->cache_tree, revs, &path);
|
||||
add_cache_tree(istate->cache_tree, revs, &path, flags);
|
||||
strbuf_release(&path);
|
||||
}
|
||||
}
|
||||
@ -1378,7 +1381,7 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags)
|
||||
struct worktree **worktrees, **p;
|
||||
|
||||
read_index(revs->repo->index);
|
||||
do_add_index_objects_to_pending(revs, revs->repo->index);
|
||||
do_add_index_objects_to_pending(revs, revs->repo->index, flags);
|
||||
|
||||
if (revs->single_worktree)
|
||||
return;
|
||||
@ -1394,7 +1397,7 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags)
|
||||
if (read_index_from(&istate,
|
||||
worktree_git_path(wt, "index"),
|
||||
get_worktree_git_dir(wt)) > 0)
|
||||
do_add_index_objects_to_pending(revs, &istate);
|
||||
do_add_index_objects_to_pending(revs, &istate, flags);
|
||||
discard_index(&istate);
|
||||
}
|
||||
free_worktrees(worktrees);
|
||||
|
@ -113,6 +113,8 @@ check_approxidate '3:00' '2009-08-30 03:00:00'
|
||||
check_approxidate '15:00' '2009-08-30 15:00:00'
|
||||
check_approxidate 'noon today' '2009-08-30 12:00:00'
|
||||
check_approxidate 'noon yesterday' '2009-08-29 12:00:00'
|
||||
check_approxidate 'January 5th noon pm' '2009-01-05 12:00:00'
|
||||
check_approxidate '10am noon' '2009-08-29 12:00:00'
|
||||
|
||||
check_approxidate 'last tuesday' '2009-08-25 19:20:00'
|
||||
check_approxidate 'July 5th' '2009-07-05 19:20:00'
|
||||
|
@ -90,11 +90,18 @@ test_expect_success 'rev-list can show index objects' '
|
||||
9200b628cf9dc883a85a7abc8d6e6730baee589c two
|
||||
EOF
|
||||
echo only-in-index >only-in-index &&
|
||||
test_when_finished "git reset --hard" &&
|
||||
git add only-in-index &&
|
||||
git rev-list --objects --indexed-objects >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'rev-list can negate index objects' '
|
||||
git rev-parse HEAD >expect &&
|
||||
git rev-list -1 --objects HEAD --not --indexed-objects >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '--bisect and --first-parent can not be combined' '
|
||||
test_must_fail git rev-list --bisect --first-parent HEAD
|
||||
'
|
||||
|
Loading…
Reference in New Issue
Block a user