示例#1
0
static void adjust_git_path(struct strbuf *buf, int git_dir_len)
{
	const char *base = buf->buf + git_dir_len;
	if (git_graft_env && is_dir_file(base, "info", "grafts"))
		strbuf_splice(buf, 0, buf->len,
			      get_graft_file(), strlen(get_graft_file()));
	else if (git_index_env && !strcmp(base, "index"))
		strbuf_splice(buf, 0, buf->len,
			      get_index_file(), strlen(get_index_file()));
	else if (git_db_env && dir_prefix(base, "objects"))
		replace_dir(buf, git_dir_len + 7, get_object_directory());
	else if (git_common_dir_env)
		update_common_dir(buf, git_dir_len);
}
示例#2
0
文件: replace.c 项目: PEPE-coin/git
static int convert_graft_file(int force)
{
	const char *graft_file = get_graft_file();
	FILE *fp = fopen_or_warn(graft_file, "r");
	struct strbuf buf = STRBUF_INIT, err = STRBUF_INIT;
	struct argv_array args = ARGV_ARRAY_INIT;

	if (!fp)
		return -1;

	while (strbuf_getline(&buf, fp) != EOF) {
		if (*buf.buf == '#')
			continue;

		argv_array_split(&args, buf.buf);
		if (args.argc && create_graft(args.argc, args.argv, force, 1))
			strbuf_addf(&err, "\n\t%s", buf.buf);
		argv_array_clear(&args);
	}
	fclose(fp);

	strbuf_release(&buf);

	if (!err.len)
		return unlink_or_warn(graft_file);

	warning(_("could not convert the following graft(s):\n%s"), err.buf);
	strbuf_release(&err);

	return -1;
}
示例#3
0
static void prepare_commit_graft(void)
{
	char *graft_file = get_graft_file();
	FILE *fp = fopen(graft_file, "r");
	char buf[1024];
	if (!fp) {
		commit_graft = (struct commit_graft **) "hack";
		return;
	}
	while (fgets(buf, sizeof(buf), fp)) {
		/* The format is just "Commit Parent1 Parent2 ...\n" */
		int len = strlen(buf);
		int i;
		struct commit_graft *graft = NULL;

		if (buf[len-1] == '\n')
			buf[--len] = 0;
		if (buf[0] == '#')
			continue;
		if ((len + 1) % 41) {
		bad_graft_data:
			error("bad graft data: %s", buf);
			free(graft);
			continue;
		}
		i = (len + 1) / 41 - 1;
		graft = xmalloc(sizeof(*graft) + 20 * i);
		graft->nr_parent = i;
		if (get_sha1_hex(buf, graft->sha1))
			goto bad_graft_data;
		for (i = 40; i < len; i += 41) {
			if (buf[i] != ' ')
				goto bad_graft_data;
			if (get_sha1_hex(buf + i + 1, graft->parent[i/41]))
				goto bad_graft_data;
		}
		i = commit_graft_pos(graft->sha1);
		if (0 <= i) {
			error("duplicate graft data: %s", buf);
			free(graft);
			continue;
		}
		i = -i - 1;
		if (commit_graft_alloc <= ++commit_graft_nr) {
			commit_graft_alloc = alloc_nr(commit_graft_alloc);
			commit_graft = xrealloc(commit_graft,
						sizeof(*commit_graft) *
						commit_graft_alloc);
		}
		if (i < commit_graft_nr)
			memmove(commit_graft + i + 1,
				commit_graft + i,
				(commit_graft_nr - i - 1) *
				sizeof(*commit_graft));
		commit_graft[i] = graft;
	}
	fclose(fp);
}