diff options
Diffstat (limited to 'revision.c')
| -rw-r--r-- | revision.c | 99 | 
1 files changed, 27 insertions, 72 deletions
diff --git a/revision.c b/revision.c index 0a282f533b..edba5b79bc 100644 --- a/revision.c +++ b/revision.c @@ -25,69 +25,13 @@ volatile show_early_output_fn_t show_early_output;  static const char *term_bad;  static const char *term_good; -char *path_name(const struct name_path *path, const char *name) -{ -	const struct name_path *p; -	char *n, *m; -	int nlen = strlen(name); -	int len = nlen + 1; - -	for (p = path; p; p = p->up) { -		if (p->elem_len) -			len += p->elem_len + 1; -	} -	n = xmalloc(len); -	m = n + len - (nlen + 1); -	memcpy(m, name, nlen + 1); -	for (p = path; p; p = p->up) { -		if (p->elem_len) { -			m -= p->elem_len + 1; -			memcpy(m, p->elem, p->elem_len); -			m[p->elem_len] = '/'; -		} -	} -	return n; -} - -static int show_path_component_truncated(FILE *out, const char *name, int len) -{ -	int cnt; -	for (cnt = 0; cnt < len; cnt++) { -		int ch = name[cnt]; -		if (!ch || ch == '\n') -			return -1; -		fputc(ch, out); -	} -	return len; -} - -static int show_path_truncated(FILE *out, const struct name_path *path) -{ -	int emitted, ours; - -	if (!path) -		return 0; -	emitted = show_path_truncated(out, path->up); -	if (emitted < 0) -		return emitted; -	if (emitted) -		fputc('/', out); -	ours = show_path_component_truncated(out, path->elem, path->elem_len); -	if (ours < 0) -		return ours; -	return ours || emitted; -} - -void show_object_with_name(FILE *out, struct object *obj, -			   const struct name_path *path, const char *component) +void show_object_with_name(FILE *out, struct object *obj, const char *name)  { -	struct name_path leaf; -	leaf.up = (struct name_path *)path; -	leaf.elem = component; -	leaf.elem_len = strlen(component); +	const char *p;  	fprintf(out, "%s ", oid_to_hex(&obj->oid)); -	show_path_truncated(out, &leaf); +	for (p = name; *p && *p != '\n'; p++) +		fputc(*p, out);  	fputc('\n', out);  } @@ -115,10 +59,10 @@ static void mark_tree_contents_uninteresting(struct tree *tree)  	while (tree_entry(&desc, &entry)) {  		switch (object_type(entry.mode)) {  		case OBJ_TREE: -			mark_tree_uninteresting(lookup_tree(entry.sha1)); +			mark_tree_uninteresting(lookup_tree(entry.oid->hash));  			break;  		case OBJ_BLOB: -			mark_blob_uninteresting(lookup_blob(entry.sha1)); +			mark_blob_uninteresting(lookup_blob(entry.oid->hash));  			break;  		default:  			/* Subproject commit - not in this repository */ @@ -540,7 +484,7 @@ struct treesame_state {  static struct treesame_state *initialise_treesame(struct rev_info *revs, struct commit *commit)  {  	unsigned n = commit_list_count(commit->parents); -	struct treesame_state *st = xcalloc(1, sizeof(*st) + n); +	struct treesame_state *st = xcalloc(1, st_add(sizeof(*st), n));  	st->nparents = n;  	add_decoration(&revs->treesame, &commit->object, st);  	return st; @@ -1412,8 +1356,10 @@ void init_revisions(struct rev_info *revs, const char *prefix)  	revs->skip_count = -1;  	revs->max_count = -1;  	revs->max_parents = -1; +	revs->expand_tabs_in_log = -1;  	revs->commit_format = CMIT_FMT_DEFAULT; +	revs->expand_tabs_in_log_default = 8;  	init_grep_defaults();  	grep_init(&revs->grep_filter, prefix); @@ -1479,7 +1425,7 @@ static void prepare_show_merge(struct rev_info *revs)  		       ce_same_name(ce, active_cache[i+1]))  			i++;  	} -	free_pathspec(&revs->prune_data); +	clear_pathspec(&revs->prune_data);  	parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,  		       PATHSPEC_PREFER_FULL | PATHSPEC_LITERAL_PATH, "", prune);  	revs->limited = 1; @@ -1635,10 +1581,7 @@ static void append_prune_data(struct cmdline_pathspec *prune, const char **av)  static void read_pathspec_from_stdin(struct rev_info *revs, struct strbuf *sb,  				     struct cmdline_pathspec *prune)  { -	while (strbuf_getwholeline(sb, stdin, '\n') != EOF) { -		int len = sb->len; -		if (len && sb->buf[len - 1] == '\n') -			sb->buf[--len] = '\0'; +	while (strbuf_getline(sb, stdin) != EOF) {  		ALLOC_GROW(prune->path, prune->nr + 1, prune->alloc);  		prune->path[prune->nr++] = xstrdup(sb->buf);  	} @@ -1655,10 +1598,8 @@ static void read_revisions_from_stdin(struct rev_info *revs,  	warn_on_object_refname_ambiguity = 0;  	strbuf_init(&sb, 1000); -	while (strbuf_getwholeline(&sb, stdin, '\n') != EOF) { +	while (strbuf_getline(&sb, stdin) != EOF) {  		int len = sb.len; -		if (len && sb.buf[len - 1] == '\n') -			sb.buf[--len] = '\0';  		if (!len)  			break;  		if (sb.buf[0] == '-') { @@ -1915,12 +1856,23 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg  		revs->verbose_header = 1;  		revs->pretty_given = 1;  		get_commit_format(arg+9, revs); +	} else if (!strcmp(arg, "--expand-tabs")) { +		revs->expand_tabs_in_log = 8; +	} else if (!strcmp(arg, "--no-expand-tabs")) { +		revs->expand_tabs_in_log = 0; +	} else if (skip_prefix(arg, "--expand-tabs=", &arg)) { +		int val; +		if (strtol_i(arg, 10, &val) < 0 || val < 0) +			die("'%s': not a non-negative integer", arg); +		revs->expand_tabs_in_log = val;  	} else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) {  		revs->show_notes = 1;  		revs->show_notes_given = 1;  		revs->notes_opt.use_default_notes = 1;  	} else if (!strcmp(arg, "--show-signature")) {  		revs->show_signature = 1; +	} else if (!strcmp(arg, "--no-show-signature")) { +		revs->show_signature = 0;  	} else if (!strcmp(arg, "--show-linear-break") ||  		   starts_with(arg, "--show-linear-break=")) {  		if (starts_with(arg, "--show-linear-break=")) @@ -2049,7 +2001,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg  	} else if (!strcmp(arg, "--ignore-missing")) {  		revs->ignore_missing = 1;  	} else { -		int opts = diff_opt_parse(&revs->diffopt, argv, argc); +		int opts = diff_opt_parse(&revs->diffopt, argv, argc, revs->prefix);  		if (!opts)  			unkv[(*unkc)++] = arg;  		return opts; @@ -2388,6 +2340,9 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s  	if (revs->first_parent_only && revs->bisect)  		die(_("--first-parent is incompatible with --bisect")); +	if (revs->expand_tabs_in_log < 0) +		revs->expand_tabs_in_log = revs->expand_tabs_in_log_default; +  	return left;  }  | 
