Skip to content

Commit d555858

Browse files
committed
Merge branch 'maint'
* maint: commit: discard index after setting up partial commit filter-branch: handle filenames that need quoting diff: Fix miscounting of --check output hg-to-git: fix parent analysis mailinfo: feed only one line to handle_filter() for QP input diff.c: add "const" qualifier to "char *cmd" member of "struct ll_diff_driver" Add "const" qualifier to "char *excludes_file". Add "const" qualifier to "char *editor_program". Add "const" qualifier to "char *pager_program". config: add 'git_config_string' to refactor string config variables. diff.c: remove useless check for value != NULL fast-import: check return value from unpack_entry() Validate nicknames of remote branches to prohibit confusing ones diff.c: replace a 'strdup' with 'xstrdup'. diff.c: fixup garding of config parser from value=NULL
2 parents aa8d53e + 959ba67 commit d555858

18 files changed

+143
-58
lines changed

builtin-commit.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,10 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
317317
if (write_cache(fd, active_cache, active_nr) ||
318318
close_lock_file(&false_lock))
319319
die("unable to write temporary index file");
320+
321+
discard_cache();
322+
read_cache_from(false_lock.filename);
323+
320324
return false_lock.filename;
321325
}
322326

builtin-mailinfo.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,7 @@ static void handle_body(void)
818818

819819
switch (transfer_encoding) {
820820
case TE_BASE64:
821+
case TE_QP:
821822
{
822823
char *op = line;
823824

cache.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,7 @@ extern int git_parse_ulong(const char *, unsigned long *);
625625
extern int git_config_int(const char *, const char *);
626626
extern unsigned long git_config_ulong(const char *, const char *);
627627
extern int git_config_bool(const char *, const char *);
628+
extern int git_config_string(const char **, const char *, const char *);
628629
extern int git_config_set(const char *, const char *);
629630
extern int git_config_set_multivar(const char *, const char *, const char *, int);
630631
extern int git_config_rename_section(const char *, const char *);
@@ -650,12 +651,12 @@ extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char
650651

651652
/* pager.c */
652653
extern void setup_pager(void);
653-
extern char *pager_program;
654+
extern const char *pager_program;
654655
extern int pager_in_use(void);
655656
extern int pager_use_color;
656657

657-
extern char *editor_program;
658-
extern char *excludes_file;
658+
extern const char *editor_program;
659+
extern const char *excludes_file;
659660

660661
/* base85 */
661662
int decode_85(char *dst, const char *line, int linelen);

config.c

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,14 @@ int git_config_bool(const char *name, const char *value)
309309
return git_config_int(name, value) != 0;
310310
}
311311

312+
int git_config_string(const char **dest, const char *var, const char *value)
313+
{
314+
if (!value)
315+
return config_error_nonbool(var);
316+
*dest = xstrdup(value);
317+
return 0;
318+
}
319+
312320
int git_default_config(const char *var, const char *value)
313321
{
314322
/* This needs a better name */
@@ -421,46 +429,25 @@ int git_default_config(const char *var, const char *value)
421429
return 0;
422430
}
423431

424-
if (!strcmp(var, "i18n.commitencoding")) {
425-
if (!value)
426-
return config_error_nonbool(var);
427-
git_commit_encoding = xstrdup(value);
428-
return 0;
429-
}
430-
431-
if (!strcmp(var, "i18n.logoutputencoding")) {
432-
if (!value)
433-
return config_error_nonbool(var);
434-
git_log_output_encoding = xstrdup(value);
435-
return 0;
436-
}
432+
if (!strcmp(var, "i18n.commitencoding"))
433+
return git_config_string(&git_commit_encoding, var, value);
437434

435+
if (!strcmp(var, "i18n.logoutputencoding"))
436+
return git_config_string(&git_log_output_encoding, var, value);
438437

439438
if (!strcmp(var, "pager.color") || !strcmp(var, "color.pager")) {
440439
pager_use_color = git_config_bool(var,value);
441440
return 0;
442441
}
443442

444-
if (!strcmp(var, "core.pager")) {
445-
if (!value)
446-
return config_error_nonbool(var);
447-
pager_program = xstrdup(value);
448-
return 0;
449-
}
443+
if (!strcmp(var, "core.pager"))
444+
return git_config_string(&pager_program, var, value);
450445

451-
if (!strcmp(var, "core.editor")) {
452-
if (!value)
453-
return config_error_nonbool(var);
454-
editor_program = xstrdup(value);
455-
return 0;
456-
}
446+
if (!strcmp(var, "core.editor"))
447+
return git_config_string(&editor_program, var, value);
457448

458-
if (!strcmp(var, "core.excludesfile")) {
459-
if (!value)
460-
return config_error_nonbool(var);
461-
excludes_file = xstrdup(value);
462-
return 0;
463-
}
449+
if (!strcmp(var, "core.excludesfile"))
450+
return git_config_string(&excludes_file, var, value);
464451

465452
if (!strcmp(var, "core.whitespace")) {
466453
if (!value)

contrib/hg-to-git/hg-to-git.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def getgitenv(user, date):
111111
hgbranch["0"] = "master"
112112
for cset in range(1, int(tip) + 1):
113113
hgchildren[str(cset)] = ()
114-
prnts = os.popen('hg log -r %d --template "{parents}"' % cset).read().split(' ')
114+
prnts = os.popen('hg log -r %d --template "{parents}"' % cset).read().strip().split(' ')
115115
prnts = map(lambda x: x[:x.find(':')], prnts)
116116
if prnts[0] != '':
117117
parent = prnts[0].strip()

diff.c

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ static int parse_diff_color_slot(const char *var, int ofs)
5757
static struct ll_diff_driver {
5858
const char *name;
5959
struct ll_diff_driver *next;
60-
char *cmd;
60+
const char *cmd;
6161
} *user_diff, **user_diff_tail;
6262

6363
/*
@@ -86,10 +86,7 @@ static int parse_lldiff_command(const char *var, const char *ep, const char *val
8686
user_diff_tail = &(drv->next);
8787
}
8888

89-
if (!value)
90-
return error("%s: lacks value", var);
91-
drv->cmd = strdup(value);
92-
return 0;
89+
return git_config_string(&(drv->cmd), var, value);
9390
}
9491

9592
/*
@@ -166,13 +163,8 @@ int git_diff_ui_config(const char *var, const char *value)
166163
if (!prefixcmp(var, "diff.")) {
167164
const char *ep = strrchr(var, '.');
168165

169-
if (ep != var + 4) {
170-
if (!strcmp(ep, ".command")) {
171-
if (!value)
172-
return config_error_nonbool(var);
173-
return parse_lldiff_command(var, ep, value);
174-
}
175-
}
166+
if (ep != var + 4 && !strcmp(ep, ".command"))
167+
return parse_lldiff_command(var, ep, value);
176168
}
177169

178170
return git_diff_basic_config(var, value);
@@ -1021,6 +1013,7 @@ static void checkdiff_consume(void *priv, char *line, unsigned long len)
10211013
char *err;
10221014

10231015
if (line[0] == '+') {
1016+
data->lineno++;
10241017
data->status = check_and_emit_line(line + 1, len - 1,
10251018
data->ws_rule, NULL, NULL, NULL, NULL);
10261019
if (!data->status)
@@ -1031,13 +1024,12 @@ static void checkdiff_consume(void *priv, char *line, unsigned long len)
10311024
emit_line(set, reset, line, 1);
10321025
(void)check_and_emit_line(line + 1, len - 1, data->ws_rule,
10331026
stdout, set, reset, ws);
1034-
data->lineno++;
10351027
} else if (line[0] == ' ')
10361028
data->lineno++;
10371029
else if (line[0] == '@') {
10381030
char *plus = strchr(line, '+');
10391031
if (plus)
1040-
data->lineno = strtol(plus, NULL, 10);
1032+
data->lineno = strtol(plus, NULL, 10) - 1;
10411033
else
10421034
die("invalid diff");
10431035
}

environment.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ int core_compression_seen;
3030
size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
3131
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
3232
size_t delta_base_cache_limit = 16 * 1024 * 1024;
33-
char *pager_program;
33+
const char *pager_program;
3434
int pager_use_color = 1;
35-
char *editor_program;
36-
char *excludes_file;
35+
const char *editor_program;
36+
const char *excludes_file;
3737
int auto_crlf = 0; /* 1: both ways, -1: only when adding git objects */
3838
unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
3939

fast-import.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,6 +1204,8 @@ static void load_tree(struct tree_entry *root)
12041204
die("Not a tree: %s", sha1_to_hex(sha1));
12051205
t->delta_depth = myoe->depth;
12061206
buf = gfi_unpack_entry(myoe, &size);
1207+
if (!buf)
1208+
die("Can't load tree %s", sha1_to_hex(sha1));
12071209
} else {
12081210
enum object_type type;
12091211
buf = read_sha1_file(sha1, &type, &size);

git-filter-branch.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,11 @@ while read commit parents; do
276276
eval "$filter_tree" < /dev/null ||
277277
die "tree filter failed: $filter_tree"
278278

279-
git diff-index -r $commit | cut -f 2- | tr '\012' '\000' | \
280-
xargs -0 git update-index --add --replace --remove
281-
git ls-files -z --others | \
282-
xargs -0 git update-index --add --replace --remove
279+
(
280+
git diff-index -r --name-only $commit
281+
git ls-files --others
282+
) |
283+
git update-index --add --replace --remove --stdin
283284
fi
284285

285286
eval "$filter_index" < /dev/null ||

remote.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,16 @@ struct refspec *parse_ref_spec(int nr_refspec, const char **refspec)
343343
return rs;
344344
}
345345

346+
static int valid_remote_nick(const char *name)
347+
{
348+
if (!name[0] || /* not empty */
349+
(name[0] == '.' && /* not "." */
350+
(!name[1] || /* not ".." */
351+
(name[1] == '.' && !name[2]))))
352+
return 0;
353+
return !strchr(name, '/'); /* no slash */
354+
}
355+
346356
struct remote *remote_get(const char *name)
347357
{
348358
struct remote *ret;
@@ -351,7 +361,7 @@ struct remote *remote_get(const char *name)
351361
if (!name)
352362
name = default_remote_name;
353363
ret = make_remote(name, 0);
354-
if (name[0] != '/') {
364+
if (valid_remote_nick(name)) {
355365
if (!ret->url)
356366
read_remotes_file(ret);
357367
if (!ret->url)

0 commit comments

Comments
 (0)