Merge branch 'jc/pull-signed-tag'
* jc/pull-signed-tag: commit-tree: teach -m/-F options to read logs from elsewhere commit-tree: update the command line parsing commit: teach --amend to carry forward extra headers merge: force edit and no-ff mode when merging a tag object commit: copy merged signed tags to headers of merge commit merge: record tag objects without peeling in MERGE_HEAD merge: make usage of commit->util more extensible fmt-merge-msg: Add contents of merged tag in the merge message fmt-merge-msg: package options into a structure fmt-merge-msg: avoid early returns refs DWIMmery: use the same rule for both "git fetch" and others fetch: allow "git fetch $there v1.0" to fetch a tag merge: notice local merging of tags and keep it unwrapped fetch: do not store peeled tag object names in FETCH_HEAD Split GPG interface into its own helper library Conflicts: builtin/fmt-merge-msg.c builtin/merge.c
This commit is contained in:
commit
eb8aa3d2c2
@ -9,7 +9,8 @@ git-commit-tree - Create a new commit object
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git commit-tree' <tree> [(-p <parent commit>)...] < changelog
|
||||
'git commit-tree' <tree> [(-p <parent>)...] < changelog
|
||||
'git commit-tree' [(-p <parent>)...] [(-m <message>)...] [(-F <file>)...] <tree>
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -17,7 +18,8 @@ This is usually not what an end user wants to run directly. See
|
||||
linkgit:git-commit[1] instead.
|
||||
|
||||
Creates a new commit object based on the provided tree object and
|
||||
emits the new commit object id on stdout.
|
||||
emits the new commit object id on stdout. The log message is read
|
||||
from the standard input, unless `-m` or `-F` options are given.
|
||||
|
||||
A commit object may have any number of parents. With exactly one
|
||||
parent, it is an ordinary commit. Having more than one parent makes
|
||||
@ -39,9 +41,17 @@ OPTIONS
|
||||
<tree>::
|
||||
An existing tree object
|
||||
|
||||
-p <parent commit>::
|
||||
-p <parent>::
|
||||
Each '-p' indicates the id of a parent commit object.
|
||||
|
||||
-m <message>::
|
||||
A paragraph in the commig log message. This can be given more than
|
||||
once and each <message> becomes its own paragraph.
|
||||
|
||||
-F <file>::
|
||||
Read the commit log message from the given file. Use `-` to read
|
||||
from the standard input.
|
||||
|
||||
|
||||
Commit Information
|
||||
------------------
|
||||
|
2
Makefile
2
Makefile
@ -536,6 +536,7 @@ LIB_H += fmt-merge-msg.h
|
||||
LIB_H += fsck.h
|
||||
LIB_H += gettext.h
|
||||
LIB_H += git-compat-util.h
|
||||
LIB_H += gpg-interface.h
|
||||
LIB_H += graph.h
|
||||
LIB_H += grep.h
|
||||
LIB_H += hash.h
|
||||
@ -629,6 +630,7 @@ LIB_OBJS += entry.o
|
||||
LIB_OBJS += environment.o
|
||||
LIB_OBJS += exec_cmd.o
|
||||
LIB_OBJS += fsck.o
|
||||
LIB_OBJS += gpg-interface.o
|
||||
LIB_OBJS += graph.o
|
||||
LIB_OBJS += grep.o
|
||||
LIB_OBJS += hash.o
|
||||
|
@ -14,8 +14,14 @@ extern const char git_usage_string[];
|
||||
extern const char git_more_info_string[];
|
||||
|
||||
extern void prune_packed_objects(int);
|
||||
|
||||
struct fmt_merge_msg_opts {
|
||||
unsigned add_title:1;
|
||||
int shortlog_len;
|
||||
};
|
||||
|
||||
extern int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
|
||||
int merge_title, int shortlog_len);
|
||||
struct fmt_merge_msg_opts *);
|
||||
extern void commit_notes(struct notes_tree *t, const char *msg);
|
||||
|
||||
struct notes_rewrite_cfg {
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include "builtin.h"
|
||||
#include "utf8.h"
|
||||
|
||||
static const char commit_tree_usage[] = "git commit-tree <sha1> [(-p <sha1>)...] < changelog";
|
||||
static const char commit_tree_usage[] = "git commit-tree [(-p <sha1>)...] [-m <message>] [-F <file>] <sha1> <changelog";
|
||||
|
||||
static void new_parent(struct commit *parent, struct commit_list **parents_p)
|
||||
{
|
||||
@ -27,7 +27,7 @@ static void new_parent(struct commit *parent, struct commit_list **parents_p)
|
||||
|
||||
int cmd_commit_tree(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i;
|
||||
int i, got_tree = 0;
|
||||
struct commit_list *parents = NULL;
|
||||
unsigned char tree_sha1[20];
|
||||
unsigned char commit_sha1[20];
|
||||
@ -37,24 +37,66 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (argc < 2 || !strcmp(argv[1], "-h"))
|
||||
usage(commit_tree_usage);
|
||||
if (get_sha1(argv[1], tree_sha1))
|
||||
die("Not a valid object name %s", argv[1]);
|
||||
|
||||
for (i = 2; i < argc; i += 2) {
|
||||
unsigned char sha1[20];
|
||||
const char *a, *b;
|
||||
a = argv[i]; b = argv[i+1];
|
||||
if (!b || strcmp(a, "-p"))
|
||||
usage(commit_tree_usage);
|
||||
for (i = 1; i < argc; i++) {
|
||||
const char *arg = argv[i];
|
||||
if (!strcmp(arg, "-p")) {
|
||||
unsigned char sha1[20];
|
||||
if (argc <= ++i)
|
||||
usage(commit_tree_usage);
|
||||
if (get_sha1(argv[i], sha1))
|
||||
die("Not a valid object name %s", argv[i]);
|
||||
assert_sha1_type(sha1, OBJ_COMMIT);
|
||||
new_parent(lookup_commit(sha1), &parents);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (get_sha1(b, sha1))
|
||||
die("Not a valid object name %s", b);
|
||||
assert_sha1_type(sha1, OBJ_COMMIT);
|
||||
new_parent(lookup_commit(sha1), &parents);
|
||||
if (!strcmp(arg, "-m")) {
|
||||
if (argc <= ++i)
|
||||
usage(commit_tree_usage);
|
||||
if (buffer.len)
|
||||
strbuf_addch(&buffer, '\n');
|
||||
strbuf_addstr(&buffer, argv[i]);
|
||||
strbuf_complete_line(&buffer);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcmp(arg, "-F")) {
|
||||
int fd;
|
||||
|
||||
if (argc <= ++i)
|
||||
usage(commit_tree_usage);
|
||||
if (buffer.len)
|
||||
strbuf_addch(&buffer, '\n');
|
||||
if (!strcmp(argv[i], "-"))
|
||||
fd = 0;
|
||||
else {
|
||||
fd = open(argv[i], O_RDONLY);
|
||||
if (fd < 0)
|
||||
die_errno("git commit-tree: failed to open '%s'",
|
||||
argv[i]);
|
||||
}
|
||||
if (strbuf_read(&buffer, fd, 0) < 0)
|
||||
die_errno("git commit-tree: failed to read '%s'",
|
||||
argv[i]);
|
||||
if (fd && close(fd))
|
||||
die_errno("git commit-tree: failed to close '%s'",
|
||||
argv[i]);
|
||||
strbuf_complete_line(&buffer);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (get_sha1(arg, tree_sha1))
|
||||
die("Not a valid object name %s", arg);
|
||||
if (got_tree)
|
||||
die("Cannot give more than one trees");
|
||||
got_tree = 1;
|
||||
}
|
||||
|
||||
if (strbuf_read(&buffer, 0, 0) < 0)
|
||||
die_errno("git commit-tree: failed to read");
|
||||
if (!buffer.len) {
|
||||
if (strbuf_read(&buffer, 0, 0) < 0)
|
||||
die_errno("git commit-tree: failed to read");
|
||||
}
|
||||
|
||||
if (commit_tree(buffer.buf, tree_sha1, parents, commit_sha1, NULL)) {
|
||||
strbuf_release(&buffer);
|
||||
|
@ -1382,6 +1382,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
int allow_fast_forward = 1;
|
||||
struct wt_status s;
|
||||
struct commit *current_head = NULL;
|
||||
struct commit_extra_header *extra = NULL;
|
||||
|
||||
if (argc == 2 && !strcmp(argv[1], "-h"))
|
||||
usage_with_options(builtin_commit_usage, builtin_commit_options);
|
||||
@ -1425,7 +1426,6 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
pptr = &commit_list_insert(c->item, pptr)->next;
|
||||
} else if (whence == FROM_MERGE) {
|
||||
struct strbuf m = STRBUF_INIT;
|
||||
struct commit *commit;
|
||||
FILE *fp;
|
||||
|
||||
if (!reflog_msg)
|
||||
@ -1436,11 +1436,12 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
die_errno(_("could not open '%s' for reading"),
|
||||
git_path("MERGE_HEAD"));
|
||||
while (strbuf_getline(&m, fp, '\n') != EOF) {
|
||||
unsigned char sha1[20];
|
||||
if (get_sha1_hex(m.buf, sha1) < 0)
|
||||
struct commit *parent;
|
||||
|
||||
parent = get_merge_parent(m.buf);
|
||||
if (!parent)
|
||||
die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
|
||||
commit = lookup_commit_or_die(sha1, "MERGE_HEAD");
|
||||
pptr = &commit_list_insert(commit, pptr)->next;
|
||||
pptr = &commit_list_insert(parent, pptr)->next;
|
||||
}
|
||||
fclose(fp);
|
||||
strbuf_release(&m);
|
||||
@ -1483,12 +1484,16 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (commit_tree(sb.buf, active_cache_tree->sha1, parents, sha1,
|
||||
author_ident.buf)) {
|
||||
if (amend)
|
||||
extra = read_commit_extra_headers(current_head);
|
||||
|
||||
if (commit_tree_extended(sb.buf, active_cache_tree->sha1, parents, sha1,
|
||||
author_ident.buf, extra)) {
|
||||
rollback_index_files();
|
||||
die(_("failed to write commit object"));
|
||||
}
|
||||
strbuf_release(&author_ident);
|
||||
free_commit_extra_headers(extra);
|
||||
|
||||
ref_lock = lock_any_ref_for_update("HEAD",
|
||||
!current_head
|
||||
|
@ -436,8 +436,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
||||
}
|
||||
note[note_len] = '\0';
|
||||
fprintf(fp, "%s\t%s\t%s",
|
||||
sha1_to_hex(commit ? commit->object.sha1 :
|
||||
rm->old_sha1),
|
||||
sha1_to_hex(rm->old_sha1),
|
||||
rm->merge ? "" : "not-for-merge",
|
||||
note);
|
||||
for (i = 0; i < url_len; ++i)
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "string-list.h"
|
||||
#include "branch.h"
|
||||
#include "fmt-merge-msg.h"
|
||||
#include "gpg-interface.h"
|
||||
|
||||
static const char * const fmt_merge_msg_usage[] = {
|
||||
"git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]",
|
||||
@ -30,6 +31,7 @@ int fmt_merge_msg_config(const char *key, const char *value, void *cb)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* merge data per repository where the merged tips came from */
|
||||
struct src_data {
|
||||
struct string_list branch, tag, r_branch, generic;
|
||||
int head_status;
|
||||
@ -82,6 +84,11 @@ static int handle_line(char *line)
|
||||
line[len - 1] = 0;
|
||||
line += 42;
|
||||
|
||||
/*
|
||||
* At this point, line points at the beginning of comment e.g.
|
||||
* "branch 'frotz' of git://that/repository.git".
|
||||
* Find the repository name and point it with src.
|
||||
*/
|
||||
src = strstr(line, " of ");
|
||||
if (src) {
|
||||
*src = 0;
|
||||
@ -242,7 +249,7 @@ static void shortlog(const char *name,
|
||||
string_list_clear(&subjects, 0);
|
||||
}
|
||||
|
||||
static void do_fmt_merge_msg_title(struct strbuf *out,
|
||||
static void fmt_merge_msg_title(struct strbuf *out,
|
||||
const char *current_branch) {
|
||||
int i = 0;
|
||||
char *sep = "";
|
||||
@ -295,8 +302,73 @@ static void do_fmt_merge_msg_title(struct strbuf *out,
|
||||
strbuf_addf(out, " into %s\n", current_branch);
|
||||
}
|
||||
|
||||
static int do_fmt_merge_msg(int merge_title, struct strbuf *in,
|
||||
struct strbuf *out, int shortlog_len) {
|
||||
static void fmt_tag_signature(struct strbuf *tagbuf,
|
||||
struct strbuf *sig,
|
||||
const char *buf,
|
||||
unsigned long len)
|
||||
{
|
||||
const char *tag_body = strstr(buf, "\n\n");
|
||||
if (tag_body) {
|
||||
tag_body += 2;
|
||||
strbuf_add(tagbuf, tag_body, buf + len - tag_body);
|
||||
}
|
||||
strbuf_complete_line(tagbuf);
|
||||
strbuf_add_lines(tagbuf, "# ", sig->buf, sig->len);
|
||||
}
|
||||
|
||||
static void fmt_merge_msg_sigs(struct strbuf *out)
|
||||
{
|
||||
int i, tag_number = 0, first_tag = 0;
|
||||
struct strbuf tagbuf = STRBUF_INIT;
|
||||
|
||||
for (i = 0; i < origins.nr; i++) {
|
||||
unsigned char *sha1 = origins.items[i].util;
|
||||
enum object_type type;
|
||||
unsigned long size, len;
|
||||
char *buf = read_sha1_file(sha1, &type, &size);
|
||||
struct strbuf sig = STRBUF_INIT;
|
||||
|
||||
if (!buf || type != OBJ_TAG)
|
||||
goto next;
|
||||
len = parse_signature(buf, size);
|
||||
|
||||
if (size == len)
|
||||
; /* merely annotated */
|
||||
else if (verify_signed_buffer(buf, len, buf + len, size - len, &sig)) {
|
||||
if (!sig.len)
|
||||
strbuf_addstr(&sig, "gpg verification failed.\n");
|
||||
}
|
||||
|
||||
if (!tag_number++) {
|
||||
fmt_tag_signature(&tagbuf, &sig, buf, len);
|
||||
first_tag = i;
|
||||
} else {
|
||||
if (tag_number == 2) {
|
||||
struct strbuf tagline = STRBUF_INIT;
|
||||
strbuf_addf(&tagline, "\n# %s\n",
|
||||
origins.items[first_tag].string);
|
||||
strbuf_insert(&tagbuf, 0, tagline.buf,
|
||||
tagline.len);
|
||||
strbuf_release(&tagline);
|
||||
}
|
||||
strbuf_addf(&tagbuf, "\n# %s\n",
|
||||
origins.items[i].string);
|
||||
fmt_tag_signature(&tagbuf, &sig, buf, len);
|
||||
}
|
||||
strbuf_release(&sig);
|
||||
next:
|
||||
free(buf);
|
||||
}
|
||||
if (tagbuf.len) {
|
||||
strbuf_addch(out, '\n');
|
||||
strbuf_addbuf(out, &tagbuf);
|
||||
}
|
||||
strbuf_release(&tagbuf);
|
||||
}
|
||||
|
||||
int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
|
||||
struct fmt_merge_msg_opts *opts)
|
||||
{
|
||||
int i = 0, pos = 0;
|
||||
unsigned char head_sha1[20];
|
||||
const char *current_branch;
|
||||
@ -322,13 +394,13 @@ static int do_fmt_merge_msg(int merge_title, struct strbuf *in,
|
||||
die ("Error in line %d: %.*s", i, len, p);
|
||||
}
|
||||
|
||||
if (!srcs.nr)
|
||||
return 0;
|
||||
if (opts->add_title && srcs.nr)
|
||||
fmt_merge_msg_title(out, current_branch);
|
||||
|
||||
if (merge_title)
|
||||
do_fmt_merge_msg_title(out, current_branch);
|
||||
if (origins.nr)
|
||||
fmt_merge_msg_sigs(out);
|
||||
|
||||
if (shortlog_len) {
|
||||
if (opts->shortlog_len) {
|
||||
struct commit *head;
|
||||
struct rev_info rev;
|
||||
|
||||
@ -344,14 +416,11 @@ static int do_fmt_merge_msg(int merge_title, struct strbuf *in,
|
||||
for (i = 0; i < origins.nr; i++)
|
||||
shortlog(origins.items[i].string,
|
||||
origins.items[i].util,
|
||||
head, &rev, shortlog_len, out);
|
||||
head, &rev, opts->shortlog_len, out);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
|
||||
int merge_title, int shortlog_len) {
|
||||
return do_fmt_merge_msg(merge_title, in, out, shortlog_len);
|
||||
strbuf_complete_line(out);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
|
||||
@ -376,6 +445,7 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
|
||||
FILE *in = stdin;
|
||||
struct strbuf input = STRBUF_INIT, output = STRBUF_INIT;
|
||||
int ret;
|
||||
struct fmt_merge_msg_opts opts;
|
||||
|
||||
git_config(fmt_merge_msg_config, NULL);
|
||||
argc = parse_options(argc, argv, prefix, options, fmt_merge_msg_usage,
|
||||
@ -384,14 +454,6 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
|
||||
usage_with_options(fmt_merge_msg_usage, options);
|
||||
if (shortlog_len < 0)
|
||||
shortlog_len = (merge_log_config > 0) ? merge_log_config : 0;
|
||||
if (message && !shortlog_len) {
|
||||
char nl = '\n';
|
||||
write_in_full(STDOUT_FILENO, message, strlen(message));
|
||||
write_in_full(STDOUT_FILENO, &nl, 1);
|
||||
return 0;
|
||||
}
|
||||
if (shortlog_len < 0)
|
||||
die("Negative --log=%d", shortlog_len);
|
||||
|
||||
if (inpath && strcmp(inpath, "-")) {
|
||||
in = fopen(inpath, "r");
|
||||
@ -404,10 +466,12 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (message)
|
||||
strbuf_addstr(&output, message);
|
||||
ret = fmt_merge_msg(&input, &output,
|
||||
message ? 0 : 1,
|
||||
shortlog_len);
|
||||
|
||||
memset(&opts, 0, sizeof(opts));
|
||||
opts.add_title = !message;
|
||||
opts.shortlog_len = shortlog_len;
|
||||
|
||||
ret = fmt_merge_msg(&input, &output, &opts);
|
||||
if (ret)
|
||||
return ret;
|
||||
write_in_full(STDOUT_FILENO, output.buf, output.len);
|
||||
|
@ -409,20 +409,10 @@ static void finish(struct commit *head_commit,
|
||||
strbuf_release(&reflog_message);
|
||||
}
|
||||
|
||||
static struct object *want_commit(const char *name)
|
||||
{
|
||||
struct object *obj;
|
||||
unsigned char sha1[20];
|
||||
if (get_sha1(name, sha1))
|
||||
return NULL;
|
||||
obj = parse_object(sha1);
|
||||
return peel_to_type(name, 0, obj, OBJ_COMMIT);
|
||||
}
|
||||
|
||||
/* Get the name for the merge commit's message. */
|
||||
static void merge_name(const char *remote, struct strbuf *msg)
|
||||
{
|
||||
struct object *remote_head;
|
||||
struct commit *remote_head;
|
||||
unsigned char branch_head[20], buf_sha[20];
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
struct strbuf bname = STRBUF_INIT;
|
||||
@ -434,7 +424,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
|
||||
remote = bname.buf;
|
||||
|
||||
memset(branch_head, 0, sizeof(branch_head));
|
||||
remote_head = want_commit(remote);
|
||||
remote_head = get_merge_parent(remote);
|
||||
if (!remote_head)
|
||||
die(_("'%s' does not point to a commit"), remote);
|
||||
|
||||
@ -444,6 +434,11 @@ static void merge_name(const char *remote, struct strbuf *msg)
|
||||
sha1_to_hex(branch_head), remote);
|
||||
goto cleanup;
|
||||
}
|
||||
if (!prefixcmp(found_ref, "refs/tags/")) {
|
||||
strbuf_addf(msg, "%s\t\ttag '%s' of .\n",
|
||||
sha1_to_hex(branch_head), remote);
|
||||
goto cleanup;
|
||||
}
|
||||
if (!prefixcmp(found_ref, "refs/remotes/")) {
|
||||
strbuf_addf(msg, "%s\t\tremote-tracking branch '%s' of .\n",
|
||||
sha1_to_hex(branch_head), remote);
|
||||
@ -485,7 +480,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
|
||||
if (resolve_ref(truname.buf, buf_sha, 1, NULL)) {
|
||||
strbuf_addf(msg,
|
||||
"%s\t\tbranch '%s'%s of .\n",
|
||||
sha1_to_hex(remote_head->sha1),
|
||||
sha1_to_hex(remote_head->object.sha1),
|
||||
truname.buf + 11,
|
||||
(early ? " (early part)" : ""));
|
||||
strbuf_release(&truname);
|
||||
@ -515,7 +510,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
|
||||
goto cleanup;
|
||||
}
|
||||
strbuf_addf(msg, "%s\t\tcommit '%s'\n",
|
||||
sha1_to_hex(remote_head->sha1), remote);
|
||||
sha1_to_hex(remote_head->object.sha1), remote);
|
||||
cleanup:
|
||||
strbuf_release(&buf);
|
||||
strbuf_release(&bname);
|
||||
@ -716,7 +711,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
||||
die(_("Unknown option for merge-recursive: -X%s"), xopts[x]);
|
||||
|
||||
o.branch1 = head_arg;
|
||||
o.branch2 = remoteheads->item->util;
|
||||
o.branch2 = merge_remote_util(remoteheads->item)->name;
|
||||
|
||||
for (j = common; j; j = j->next)
|
||||
commit_list_insert(j->item, &reversed);
|
||||
@ -1056,9 +1051,16 @@ static void write_merge_state(void)
|
||||
struct commit_list *j;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
for (j = remoteheads; j; j = j->next)
|
||||
strbuf_addf(&buf, "%s\n",
|
||||
sha1_to_hex(j->item->object.sha1));
|
||||
for (j = remoteheads; j; j = j->next) {
|
||||
unsigned const char *sha1;
|
||||
struct commit *c = j->item;
|
||||
if (c->util && merge_remote_util(c)->obj) {
|
||||
sha1 = merge_remote_util(c)->obj->sha1;
|
||||
} else {
|
||||
sha1 = c->object.sha1;
|
||||
}
|
||||
strbuf_addf(&buf, "%s\n", sha1_to_hex(sha1));
|
||||
}
|
||||
filename = git_path("MERGE_HEAD");
|
||||
fd = open(filename, O_WRONLY | O_CREAT, 0666);
|
||||
if (fd < 0)
|
||||
@ -1197,7 +1199,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
argv += 2;
|
||||
argc -= 2;
|
||||
} else if (!head_commit) {
|
||||
struct object *remote_head;
|
||||
struct commit *remote_head;
|
||||
/*
|
||||
* If the merged head is a valid one there is no reason
|
||||
* to forbid "git merge" into a branch yet to be born.
|
||||
@ -1211,12 +1213,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
if (!allow_fast_forward)
|
||||
die(_("Non-fast-forward commit does not make sense into "
|
||||
"an empty head"));
|
||||
remote_head = want_commit(argv[0]);
|
||||
remote_head = get_merge_parent(argv[0]);
|
||||
if (!remote_head)
|
||||
die(_("%s - not something we can merge"), argv[0]);
|
||||
read_empty(remote_head->sha1, 0);
|
||||
update_ref("initial pull", "HEAD", remote_head->sha1, NULL, 0,
|
||||
DIE_ON_ERR);
|
||||
read_empty(remote_head->object.sha1, 0);
|
||||
update_ref("initial pull", "HEAD", remote_head->object.sha1,
|
||||
NULL, 0, DIE_ON_ERR);
|
||||
return 0;
|
||||
} else {
|
||||
struct strbuf merge_names = STRBUF_INIT;
|
||||
@ -1225,19 +1227,20 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
head_arg = "HEAD";
|
||||
|
||||
/*
|
||||
* All the rest are the commits being merged;
|
||||
* prepare the standard merge summary message to
|
||||
* be appended to the given message. If remote
|
||||
* is invalid we will die later in the common
|
||||
* codepath so we discard the error in this
|
||||
* loop.
|
||||
* All the rest are the commits being merged; prepare
|
||||
* the standard merge summary message to be appended
|
||||
* to the given message.
|
||||
*/
|
||||
for (i = 0; i < argc; i++)
|
||||
merge_name(argv[i], &merge_names);
|
||||
|
||||
if (!have_message || shortlog_len) {
|
||||
fmt_merge_msg(&merge_names, &merge_msg, !have_message,
|
||||
shortlog_len);
|
||||
struct fmt_merge_msg_opts opts;
|
||||
memset(&opts, 0, sizeof(opts));
|
||||
opts.add_title = !have_message;
|
||||
opts.shortlog_len = shortlog_len;
|
||||
|
||||
fmt_merge_msg(&merge_names, &merge_msg, &opts);
|
||||
if (merge_msg.len)
|
||||
strbuf_setlen(&merge_msg, merge_msg.len - 1);
|
||||
}
|
||||
@ -1254,19 +1257,20 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
strbuf_reset(&buf);
|
||||
|
||||
for (i = 0; i < argc; i++) {
|
||||
struct object *o;
|
||||
struct commit *commit;
|
||||
|
||||
o = want_commit(argv[i]);
|
||||
if (!o)
|
||||
struct commit *commit = get_merge_parent(argv[i]);
|
||||
if (!commit)
|
||||
die(_("%s - not something we can merge"), argv[i]);
|
||||
commit = lookup_commit(o->sha1);
|
||||
commit->util = (void *)argv[i];
|
||||
remotes = &commit_list_insert(commit, remotes)->next;
|
||||
|
||||
strbuf_addf(&buf, "GITHEAD_%s", sha1_to_hex(o->sha1));
|
||||
strbuf_addf(&buf, "GITHEAD_%s",
|
||||
sha1_to_hex(commit->object.sha1));
|
||||
setenv(buf.buf, argv[i], 1);
|
||||
strbuf_reset(&buf);
|
||||
if (merge_remote_util(commit) &&
|
||||
merge_remote_util(commit)->obj &&
|
||||
merge_remote_util(commit)->obj->type == OBJ_TAG) {
|
||||
option_edit = 1;
|
||||
allow_fast_forward = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!use_strategies) {
|
||||
@ -1310,7 +1314,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
!hashcmp(common->item->object.sha1, head_commit->object.sha1)) {
|
||||
/* Again the most common case of merging one remote. */
|
||||
struct strbuf msg = STRBUF_INIT;
|
||||
struct object *o;
|
||||
struct commit *commit;
|
||||
char hex[41];
|
||||
|
||||
strcpy(hex, find_unique_abbrev(head_commit->object.sha1, DEFAULT_ABBREV));
|
||||
@ -1324,14 +1328,15 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
if (have_message)
|
||||
strbuf_addstr(&msg,
|
||||
" (no commit created; -m option ignored)");
|
||||
o = want_commit(sha1_to_hex(remoteheads->item->object.sha1));
|
||||
if (!o)
|
||||
commit = remoteheads->item;
|
||||
if (!commit)
|
||||
return 1;
|
||||
|
||||
if (checkout_fast_forward(head_commit->object.sha1, remoteheads->item->object.sha1))
|
||||
if (checkout_fast_forward(head_commit->object.sha1,
|
||||
commit->object.sha1))
|
||||
return 1;
|
||||
|
||||
finish(head_commit, o->sha1, msg.buf);
|
||||
finish(head_commit, commit->object.sha1, msg.buf);
|
||||
drop_save();
|
||||
return 0;
|
||||
} else if (!remoteheads->next && common->next)
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "parse-options.h"
|
||||
#include "diff.h"
|
||||
#include "revision.h"
|
||||
#include "gpg-interface.h"
|
||||
|
||||
static const char * const git_tag_usage[] = {
|
||||
"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]",
|
||||
@ -23,8 +24,6 @@ static const char * const git_tag_usage[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static char signingkey[1000];
|
||||
|
||||
struct tag_filter {
|
||||
const char **patterns;
|
||||
int lines;
|
||||
@ -208,60 +207,7 @@ static int verify_tag(const char *name, const char *ref,
|
||||
|
||||
static int do_sign(struct strbuf *buffer)
|
||||
{
|
||||
struct child_process gpg;
|
||||
const char *args[4];
|
||||
char *bracket;
|
||||
int len;
|
||||
int i, j;
|
||||
|
||||
if (!*signingkey) {
|
||||
if (strlcpy(signingkey, git_committer_info(IDENT_ERROR_ON_NO_NAME),
|
||||
sizeof(signingkey)) > sizeof(signingkey) - 1)
|
||||
return error(_("committer info too long."));
|
||||
bracket = strchr(signingkey, '>');
|
||||
if (bracket)
|
||||
bracket[1] = '\0';
|
||||
}
|
||||
|
||||
/* When the username signingkey is bad, program could be terminated
|
||||
* because gpg exits without reading and then write gets SIGPIPE. */
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
memset(&gpg, 0, sizeof(gpg));
|
||||
gpg.argv = args;
|
||||
gpg.in = -1;
|
||||
gpg.out = -1;
|
||||
args[0] = "gpg";
|
||||
args[1] = "-bsau";
|
||||
args[2] = signingkey;
|
||||
args[3] = NULL;
|
||||
|
||||
if (start_command(&gpg))
|
||||
return error(_("could not run gpg."));
|
||||
|
||||
if (write_in_full(gpg.in, buffer->buf, buffer->len) != buffer->len) {
|
||||
close(gpg.in);
|
||||
close(gpg.out);
|
||||
finish_command(&gpg);
|
||||
return error(_("gpg did not accept the tag data"));
|
||||
}
|
||||
close(gpg.in);
|
||||
len = strbuf_read(buffer, gpg.out, 1024);
|
||||
close(gpg.out);
|
||||
|
||||
if (finish_command(&gpg) || !len || len < 0)
|
||||
return error(_("gpg failed to sign the tag"));
|
||||
|
||||
/* Strip CR from the line endings, in case we are on Windows. */
|
||||
for (i = j = 0; i < buffer->len; i++)
|
||||
if (buffer->buf[i] != '\r') {
|
||||
if (i != j)
|
||||
buffer->buf[j] = buffer->buf[i];
|
||||
j++;
|
||||
}
|
||||
strbuf_setlen(buffer, j);
|
||||
|
||||
return 0;
|
||||
return sign_buffer(buffer, buffer, get_signing_key());
|
||||
}
|
||||
|
||||
static const char tag_template[] =
|
||||
@ -270,21 +216,11 @@ static const char tag_template[] =
|
||||
"# Write a tag message\n"
|
||||
"#\n");
|
||||
|
||||
static void set_signingkey(const char *value)
|
||||
{
|
||||
if (strlcpy(signingkey, value, sizeof(signingkey)) >= sizeof(signingkey))
|
||||
die(_("signing key value too long (%.10s...)"), value);
|
||||
}
|
||||
|
||||
static int git_tag_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
if (!strcmp(var, "user.signingkey")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
set_signingkey(value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int status = git_gpg_config(var, value, cb);
|
||||
if (status)
|
||||
return status;
|
||||
return git_default_config(var, value, cb);
|
||||
}
|
||||
|
||||
@ -463,7 +399,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (keyid) {
|
||||
sign = 1;
|
||||
set_signingkey(keyid);
|
||||
set_signing_key(keyid);
|
||||
}
|
||||
if (sign)
|
||||
annotate = 1;
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "run-command.h"
|
||||
#include <signal.h>
|
||||
#include "parse-options.h"
|
||||
#include "gpg-interface.h"
|
||||
|
||||
static const char * const verify_tag_usage[] = {
|
||||
"git verify-tag [-v|--verbose] <tag>...",
|
||||
@ -19,42 +20,16 @@ static const char * const verify_tag_usage[] = {
|
||||
|
||||
static int run_gpg_verify(const char *buf, unsigned long size, int verbose)
|
||||
{
|
||||
struct child_process gpg;
|
||||
const char *args_gpg[] = {"gpg", "--verify", "FILE", "-", NULL};
|
||||
char path[PATH_MAX];
|
||||
size_t len;
|
||||
int fd, ret;
|
||||
int len;
|
||||
|
||||
fd = git_mkstemp(path, PATH_MAX, ".git_vtag_tmpXXXXXX");
|
||||
if (fd < 0)
|
||||
return error("could not create temporary file '%s': %s",
|
||||
path, strerror(errno));
|
||||
if (write_in_full(fd, buf, size) < 0)
|
||||
return error("failed writing temporary file '%s': %s",
|
||||
path, strerror(errno));
|
||||
close(fd);
|
||||
|
||||
/* find the length without signature */
|
||||
len = parse_signature(buf, size);
|
||||
if (verbose)
|
||||
write_in_full(1, buf, len);
|
||||
|
||||
memset(&gpg, 0, sizeof(gpg));
|
||||
gpg.argv = args_gpg;
|
||||
gpg.in = -1;
|
||||
args_gpg[2] = path;
|
||||
if (start_command(&gpg)) {
|
||||
unlink(path);
|
||||
return error("could not run gpg.");
|
||||
}
|
||||
if (size == len)
|
||||
return error("no signature found");
|
||||
|
||||
write_in_full(gpg.in, buf, len);
|
||||
close(gpg.in);
|
||||
ret = finish_command(&gpg);
|
||||
|
||||
unlink_or_warn(path);
|
||||
|
||||
return ret;
|
||||
return verify_signed_buffer(buf, len, buf + len, size - len, NULL);
|
||||
}
|
||||
|
||||
static int verify_tag(const char *name, int verbose)
|
||||
|
2
cache.h
2
cache.h
@ -872,7 +872,7 @@ extern int get_sha1_mb(const char *str, unsigned char *sha1);
|
||||
|
||||
extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
|
||||
extern const char *ref_rev_parse_rules[];
|
||||
extern const char *ref_fetch_rules[];
|
||||
#define ref_fetch_rules ref_rev_parse_rules
|
||||
|
||||
extern int create_symref(const char *ref, const char *refs_heads_master, const char *logmsg);
|
||||
extern int validate_headref(const char *ref);
|
||||
|
180
commit.c
180
commit.c
@ -840,14 +840,160 @@ struct commit_list *reduce_heads(struct commit_list *heads)
|
||||
return result;
|
||||
}
|
||||
|
||||
static void handle_signed_tag(struct commit *parent, struct commit_extra_header ***tail)
|
||||
{
|
||||
struct merge_remote_desc *desc;
|
||||
struct commit_extra_header *mergetag;
|
||||
char *buf;
|
||||
unsigned long size, len;
|
||||
enum object_type type;
|
||||
|
||||
desc = merge_remote_util(parent);
|
||||
if (!desc || !desc->obj)
|
||||
return;
|
||||
buf = read_sha1_file(desc->obj->sha1, &type, &size);
|
||||
if (!buf || type != OBJ_TAG)
|
||||
goto free_return;
|
||||
len = parse_signature(buf, size);
|
||||
if (size == len)
|
||||
goto free_return;
|
||||
/*
|
||||
* We could verify this signature and either omit the tag when
|
||||
* it does not validate, but the integrator may not have the
|
||||
* public key of the signer of the tag he is merging, while a
|
||||
* later auditor may have it while auditing, so let's not run
|
||||
* verify-signed-buffer here for now...
|
||||
*
|
||||
* if (verify_signed_buffer(buf, len, buf + len, size - len, ...))
|
||||
* warn("warning: signed tag unverified.");
|
||||
*/
|
||||
mergetag = xcalloc(1, sizeof(*mergetag));
|
||||
mergetag->key = xstrdup("mergetag");
|
||||
mergetag->value = buf;
|
||||
mergetag->len = size;
|
||||
|
||||
**tail = mergetag;
|
||||
*tail = &mergetag->next;
|
||||
return;
|
||||
|
||||
free_return:
|
||||
free(buf);
|
||||
}
|
||||
|
||||
void append_merge_tag_headers(struct commit_list *parents,
|
||||
struct commit_extra_header ***tail)
|
||||
{
|
||||
while (parents) {
|
||||
struct commit *parent = parents->item;
|
||||
handle_signed_tag(parent, tail);
|
||||
parents = parents->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void add_extra_header(struct strbuf *buffer,
|
||||
struct commit_extra_header *extra)
|
||||
{
|
||||
strbuf_addstr(buffer, extra->key);
|
||||
if (extra->len)
|
||||
strbuf_add_lines(buffer, " ", extra->value, extra->len);
|
||||
else
|
||||
strbuf_addch(buffer, '\n');
|
||||
}
|
||||
|
||||
struct commit_extra_header *read_commit_extra_headers(struct commit *commit)
|
||||
{
|
||||
struct commit_extra_header *extra = NULL;
|
||||
unsigned long size;
|
||||
enum object_type type;
|
||||
char *buffer = read_sha1_file(commit->object.sha1, &type, &size);
|
||||
if (buffer && type == OBJ_COMMIT)
|
||||
extra = read_commit_extra_header_lines(buffer, size);
|
||||
free(buffer);
|
||||
return extra;
|
||||
}
|
||||
|
||||
static inline int standard_header_field(const char *field, size_t len)
|
||||
{
|
||||
return ((len == 4 && !memcmp(field, "tree ", 5)) ||
|
||||
(len == 6 && !memcmp(field, "parent ", 7)) ||
|
||||
(len == 6 && !memcmp(field, "author ", 7)) ||
|
||||
(len == 9 && !memcmp(field, "committer ", 10)) ||
|
||||
(len == 8 && !memcmp(field, "encoding ", 9)));
|
||||
}
|
||||
|
||||
struct commit_extra_header *read_commit_extra_header_lines(const char *buffer, size_t size)
|
||||
{
|
||||
struct commit_extra_header *extra = NULL, **tail = &extra, *it = NULL;
|
||||
const char *line, *next, *eof, *eob;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
for (line = buffer, eob = line + size;
|
||||
line < eob && *line != '\n';
|
||||
line = next) {
|
||||
next = memchr(line, '\n', eob - line);
|
||||
next = next ? next + 1 : eob;
|
||||
if (*line == ' ') {
|
||||
/* continuation */
|
||||
if (it)
|
||||
strbuf_add(&buf, line + 1, next - (line + 1));
|
||||
continue;
|
||||
}
|
||||
if (it)
|
||||
it->value = strbuf_detach(&buf, &it->len);
|
||||
strbuf_reset(&buf);
|
||||
it = NULL;
|
||||
|
||||
eof = strchr(line, ' ');
|
||||
if (next <= eof)
|
||||
eof = next;
|
||||
|
||||
if (standard_header_field(line, eof - line))
|
||||
continue;
|
||||
|
||||
it = xcalloc(1, sizeof(*it));
|
||||
it->key = xmemdupz(line, eof-line);
|
||||
*tail = it;
|
||||
tail = &it->next;
|
||||
if (eof + 1 < next)
|
||||
strbuf_add(&buf, eof + 1, next - (eof + 1));
|
||||
}
|
||||
if (it)
|
||||
it->value = strbuf_detach(&buf, &it->len);
|
||||
return extra;
|
||||
}
|
||||
|
||||
void free_commit_extra_headers(struct commit_extra_header *extra)
|
||||
{
|
||||
while (extra) {
|
||||
struct commit_extra_header *next = extra->next;
|
||||
free(extra->key);
|
||||
free(extra->value);
|
||||
free(extra);
|
||||
extra = next;
|
||||
}
|
||||
}
|
||||
|
||||
int commit_tree(const char *msg, unsigned char *tree,
|
||||
struct commit_list *parents, unsigned char *ret,
|
||||
const char *author)
|
||||
{
|
||||
struct commit_extra_header *extra = NULL, **tail = &extra;
|
||||
int result;
|
||||
|
||||
append_merge_tag_headers(parents, &tail);
|
||||
result = commit_tree_extended(msg, tree, parents, ret, author, extra);
|
||||
free_commit_extra_headers(extra);
|
||||
return result;
|
||||
}
|
||||
|
||||
static const char commit_utf8_warn[] =
|
||||
"Warning: commit message does not conform to UTF-8.\n"
|
||||
"You may want to amend it after fixing the message, or set the config\n"
|
||||
"variable i18n.commitencoding to the encoding your project uses.\n";
|
||||
|
||||
int commit_tree(const char *msg, unsigned char *tree,
|
||||
struct commit_list *parents, unsigned char *ret,
|
||||
const char *author)
|
||||
int commit_tree_extended(const char *msg, unsigned char *tree,
|
||||
struct commit_list *parents, unsigned char *ret,
|
||||
const char *author, struct commit_extra_header *extra)
|
||||
{
|
||||
int result;
|
||||
int encoding_is_utf8;
|
||||
@ -868,8 +1014,10 @@ int commit_tree(const char *msg, unsigned char *tree,
|
||||
*/
|
||||
while (parents) {
|
||||
struct commit_list *next = parents->next;
|
||||
struct commit *parent = parents->item;
|
||||
|
||||
strbuf_addf(&buffer, "parent %s\n",
|
||||
sha1_to_hex(parents->item->object.sha1));
|
||||
sha1_to_hex(parent->object.sha1));
|
||||
free(parents);
|
||||
parents = next;
|
||||
}
|
||||
@ -881,6 +1029,11 @@ int commit_tree(const char *msg, unsigned char *tree,
|
||||
strbuf_addf(&buffer, "committer %s\n", git_committer_info(IDENT_ERROR_ON_NO_NAME));
|
||||
if (!encoding_is_utf8)
|
||||
strbuf_addf(&buffer, "encoding %s\n", git_commit_encoding);
|
||||
|
||||
while (extra) {
|
||||
add_extra_header(&buffer, extra);
|
||||
extra = extra->next;
|
||||
}
|
||||
strbuf_addch(&buffer, '\n');
|
||||
|
||||
/* And add the comment */
|
||||
@ -894,3 +1047,22 @@ int commit_tree(const char *msg, unsigned char *tree,
|
||||
strbuf_release(&buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
struct commit *get_merge_parent(const char *name)
|
||||
{
|
||||
struct object *obj;
|
||||
struct commit *commit;
|
||||
unsigned char sha1[20];
|
||||
if (get_sha1(name, sha1))
|
||||
return NULL;
|
||||
obj = parse_object(sha1);
|
||||
commit = (struct commit *)peel_to_type(name, 0, obj, OBJ_COMMIT);
|
||||
if (commit && !commit->util) {
|
||||
struct merge_remote_desc *desc;
|
||||
desc = xmalloc(sizeof(*desc));
|
||||
desc->obj = obj;
|
||||
desc->name = strdup(name);
|
||||
commit->util = desc;
|
||||
}
|
||||
return commit;
|
||||
}
|
||||
|
37
commit.h
37
commit.h
@ -181,8 +181,41 @@ static inline int single_parent(struct commit *commit)
|
||||
|
||||
struct commit_list *reduce_heads(struct commit_list *heads);
|
||||
|
||||
struct commit_extra_header {
|
||||
struct commit_extra_header *next;
|
||||
char *key;
|
||||
char *value;
|
||||
size_t len;
|
||||
};
|
||||
|
||||
extern void append_merge_tag_headers(struct commit_list *parents,
|
||||
struct commit_extra_header ***tail);
|
||||
|
||||
extern int commit_tree(const char *msg, unsigned char *tree,
|
||||
struct commit_list *parents, unsigned char *ret,
|
||||
const char *author);
|
||||
struct commit_list *parents, unsigned char *ret,
|
||||
const char *author);
|
||||
|
||||
extern int commit_tree_extended(const char *msg, unsigned char *tree,
|
||||
struct commit_list *parents, unsigned char *ret,
|
||||
const char *author,
|
||||
struct commit_extra_header *);
|
||||
|
||||
extern struct commit_extra_header *read_commit_extra_headers(struct commit *);
|
||||
extern struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len);
|
||||
|
||||
extern void free_commit_extra_headers(struct commit_extra_header *extra);
|
||||
|
||||
struct merge_remote_desc {
|
||||
struct object *obj; /* the named object, could be a tag */
|
||||
const char *name;
|
||||
};
|
||||
#define merge_remote_util(commit) ((struct merge_remote_desc *)((commit)->util))
|
||||
|
||||
/*
|
||||
* Given "name" from the command line to merge, find the commit object
|
||||
* and return it, while storing merge_remote_desc in its ->util field,
|
||||
* to allow callers to tell if we are told to merge a tag.
|
||||
*/
|
||||
struct commit *get_merge_parent(const char *name);
|
||||
|
||||
#endif /* COMMIT_H */
|
||||
|
138
gpg-interface.c
Normal file
138
gpg-interface.c
Normal file
@ -0,0 +1,138 @@
|
||||
#include "cache.h"
|
||||
#include "run-command.h"
|
||||
#include "strbuf.h"
|
||||
#include "gpg-interface.h"
|
||||
#include "sigchain.h"
|
||||
|
||||
static char *configured_signing_key;
|
||||
|
||||
void set_signing_key(const char *key)
|
||||
{
|
||||
free(configured_signing_key);
|
||||
configured_signing_key = xstrdup(key);
|
||||
}
|
||||
|
||||
int git_gpg_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
if (!strcmp(var, "user.signingkey")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
set_signing_key(value);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *get_signing_key(void)
|
||||
{
|
||||
if (configured_signing_key)
|
||||
return configured_signing_key;
|
||||
return git_committer_info(IDENT_ERROR_ON_NO_NAME|IDENT_NO_DATE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a detached signature for the contents of "buffer" and append
|
||||
* it after "signature"; "buffer" and "signature" can be the same
|
||||
* strbuf instance, which would cause the detached signature appended
|
||||
* at the end.
|
||||
*/
|
||||
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
|
||||
{
|
||||
struct child_process gpg;
|
||||
const char *args[4];
|
||||
ssize_t len;
|
||||
size_t i, j, bottom;
|
||||
|
||||
memset(&gpg, 0, sizeof(gpg));
|
||||
gpg.argv = args;
|
||||
gpg.in = -1;
|
||||
gpg.out = -1;
|
||||
args[0] = "gpg";
|
||||
args[1] = "-bsau";
|
||||
args[2] = signing_key;
|
||||
args[3] = NULL;
|
||||
|
||||
if (start_command(&gpg))
|
||||
return error(_("could not run gpg."));
|
||||
|
||||
/*
|
||||
* When the username signingkey is bad, program could be terminated
|
||||
* because gpg exits without reading and then write gets SIGPIPE.
|
||||
*/
|
||||
sigchain_push(SIGPIPE, SIG_IGN);
|
||||
|
||||
if (write_in_full(gpg.in, buffer->buf, buffer->len) != buffer->len) {
|
||||
close(gpg.in);
|
||||
close(gpg.out);
|
||||
finish_command(&gpg);
|
||||
return error(_("gpg did not accept the data"));
|
||||
}
|
||||
close(gpg.in);
|
||||
|
||||
bottom = signature->len;
|
||||
len = strbuf_read(signature, gpg.out, 1024);
|
||||
close(gpg.out);
|
||||
|
||||
sigchain_pop(SIGPIPE);
|
||||
|
||||
if (finish_command(&gpg) || !len || len < 0)
|
||||
return error(_("gpg failed to sign the data"));
|
||||
|
||||
/* Strip CR from the line endings, in case we are on Windows. */
|
||||
for (i = j = bottom; i < signature->len; i++)
|
||||
if (signature->buf[i] != '\r') {
|
||||
if (i != j)
|
||||
signature->buf[j] = signature->buf[i];
|
||||
j++;
|
||||
}
|
||||
strbuf_setlen(signature, j);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Run "gpg" to see if the payload matches the detached signature.
|
||||
* gpg_output_to tells where the output from "gpg" should go:
|
||||
* < 0: /dev/null
|
||||
* = 0: standard error of the calling process
|
||||
* > 0: the specified file descriptor
|
||||
*/
|
||||
int verify_signed_buffer(const char *payload, size_t payload_size,
|
||||
const char *signature, size_t signature_size,
|
||||
struct strbuf *gpg_output)
|
||||
{
|
||||
struct child_process gpg;
|
||||
const char *args_gpg[] = {"gpg", "--verify", "FILE", "-", NULL};
|
||||
char path[PATH_MAX];
|
||||
int fd, ret;
|
||||
|
||||
fd = git_mkstemp(path, PATH_MAX, ".git_vtag_tmpXXXXXX");
|
||||
if (fd < 0)
|
||||
return error("could not create temporary file '%s': %s",
|
||||
path, strerror(errno));
|
||||
if (write_in_full(fd, signature, signature_size) < 0)
|
||||
return error("failed writing detached signature to '%s': %s",
|
||||
path, strerror(errno));
|
||||
close(fd);
|
||||
|
||||
memset(&gpg, 0, sizeof(gpg));
|
||||
gpg.argv = args_gpg;
|
||||
gpg.in = -1;
|
||||
if (gpg_output)
|
||||
gpg.err = -1;
|
||||
args_gpg[2] = path;
|
||||
if (start_command(&gpg)) {
|
||||
unlink(path);
|
||||
return error("could not run gpg.");
|
||||
}
|
||||
|
||||
write_in_full(gpg.in, payload, payload_size);
|
||||
close(gpg.in);
|
||||
|
||||
if (gpg_output)
|
||||
strbuf_read(gpg_output, gpg.err, 0);
|
||||
ret = finish_command(&gpg);
|
||||
|
||||
unlink_or_warn(path);
|
||||
|
||||
return ret;
|
||||
}
|
10
gpg-interface.h
Normal file
10
gpg-interface.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef GPG_INTERFACE_H
|
||||
#define GPG_INTERFACE_H
|
||||
|
||||
extern int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key);
|
||||
extern int verify_signed_buffer(const char *payload, size_t payload_size, const char *signature, size_t signature_size, struct strbuf *gpg_output);
|
||||
extern int git_gpg_config(const char *, const char *, void *);
|
||||
extern void set_signing_key(const char *);
|
||||
extern const char *get_signing_key(void);
|
||||
|
||||
#endif
|
@ -38,16 +38,15 @@ static struct tree *shift_tree_object(struct tree *one, struct tree *two,
|
||||
return lookup_tree(shifted);
|
||||
}
|
||||
|
||||
/*
|
||||
* A virtual commit has (const char *)commit->util set to the name.
|
||||
*/
|
||||
|
||||
static struct commit *make_virtual_commit(struct tree *tree, const char *comment)
|
||||
{
|
||||
struct commit *commit = xcalloc(1, sizeof(struct commit));
|
||||
struct merge_remote_desc *desc = xmalloc(sizeof(*desc));
|
||||
|
||||
desc->name = comment;
|
||||
desc->obj = (struct object *)commit;
|
||||
commit->tree = tree;
|
||||
commit->util = (void*)comment;
|
||||
/* avoid warnings */
|
||||
commit->util = desc;
|
||||
commit->object.parsed = 1;
|
||||
return commit;
|
||||
}
|
||||
@ -184,7 +183,7 @@ static void output_commit_title(struct merge_options *o, struct commit *commit)
|
||||
for (i = o->call_depth; i--;)
|
||||
fputs(" ", stdout);
|
||||
if (commit->util)
|
||||
printf("virtual %s\n", (char *)commit->util);
|
||||
printf("virtual %s\n", merge_remote_util(commit)->name);
|
||||
else {
|
||||
printf("%s ", find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
|
||||
if (parse_commit(commit) != 0)
|
||||
|
7
refs.c
7
refs.c
@ -998,13 +998,6 @@ const char *ref_rev_parse_rules[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
const char *ref_fetch_rules[] = {
|
||||
"%.*s",
|
||||
"refs/%.*s",
|
||||
"refs/heads/%.*s",
|
||||
NULL
|
||||
};
|
||||
|
||||
int refname_match(const char *abbrev_name, const char *full_name, const char **rules)
|
||||
{
|
||||
const char **p;
|
||||
|
14
strbuf.c
14
strbuf.c
@ -397,3 +397,17 @@ int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
void strbuf_add_lines(struct strbuf *out, const char *prefix,
|
||||
const char *buf, size_t size)
|
||||
{
|
||||
while (size) {
|
||||
const char *next = memchr(buf, '\n', size);
|
||||
next = next ? (next + 1) : (buf + size);
|
||||
strbuf_addstr(out, prefix);
|
||||
strbuf_add(out, buf, next - buf);
|
||||
size -= next - buf;
|
||||
buf = next;
|
||||
}
|
||||
strbuf_complete_line(out);
|
||||
}
|
||||
|
8
strbuf.h
8
strbuf.h
@ -100,6 +100,14 @@ extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);
|
||||
__attribute__((format (printf,2,0)))
|
||||
extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap);
|
||||
|
||||
extern void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, size_t size);
|
||||
|
||||
static inline void strbuf_complete_line(struct strbuf *sb)
|
||||
{
|
||||
if (sb->len && sb->buf[sb->len - 1] != '\n')
|
||||
strbuf_addch(sb, '\n');
|
||||
}
|
||||
|
||||
extern size_t strbuf_fread(struct strbuf *, size_t, FILE *);
|
||||
/* XXX: if read fails, any partial read is undone */
|
||||
extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);
|
||||
|
@ -346,11 +346,11 @@ test_expect_success 'set up more tangled history' '
|
||||
'
|
||||
|
||||
cat > expect <<\EOF
|
||||
* Merge commit 'reach'
|
||||
* Merge tag 'reach'
|
||||
|\
|
||||
| \
|
||||
| \
|
||||
*-. \ Merge commit 'octopus-a'; commit 'octopus-b'
|
||||
*-. \ Merge tags 'octopus-a' and 'octopus-b'
|
||||
|\ \ \
|
||||
* | | | seventh
|
||||
| | * | octopus-b
|
||||
|
@ -166,7 +166,7 @@ test_expect_success 'fetch must not resolve short tag name' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'fetch must not resolve short remote name' '
|
||||
test_expect_success 'fetch can now resolve short remote name' '
|
||||
|
||||
cd "$D" &&
|
||||
git update-ref refs/remotes/six/HEAD HEAD &&
|
||||
@ -175,8 +175,7 @@ test_expect_success 'fetch must not resolve short remote name' '
|
||||
cd six &&
|
||||
git init &&
|
||||
|
||||
test_must_fail git fetch .. six:six
|
||||
|
||||
git fetch .. six:six
|
||||
'
|
||||
|
||||
test_expect_success 'create bundle 1' '
|
||||
|
@ -1,8 +1,8 @@
|
||||
# br-branches-default
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,9 +1,9 @@
|
||||
# br-branches-default-merge
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,9 +1,9 @@
|
||||
# br-branches-default-merge branches-default
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -2,9 +2,9 @@
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -2,9 +2,9 @@
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge branch 'master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# br-branches-default branches-default
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# br-branches-one
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,9 +1,9 @@
|
||||
# br-branches-one-merge
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,9 +1,9 @@
|
||||
# br-branches-one-merge branches-one
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,9 +1,9 @@
|
||||
# br-branches-one-octopus
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,9 +1,9 @@
|
||||
# br-branches-one-octopus branches-one
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# br-branches-one branches-one
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,7 +1,7 @@
|
||||
# br-unconfig --tags ../.git
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -2,7 +2,7 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,7 +1,7 @@
|
||||
# br-unconfig ../.git tag tag-one-tree tag tag-three-file
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,7 +1,7 @@
|
||||
# br-unconfig ../.git tag tag-one tag tag-three
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b tag 'tag-three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 tag 'tag-three' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# br-unconfig branches-default
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# br-unconfig branches-one
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,7 +1,7 @@
|
||||
# master --tags ../.git
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -2,7 +2,7 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,7 +1,7 @@
|
||||
# master ../.git tag tag-one-tree tag tag-three-file
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,7 +1,7 @@
|
||||
# master ../.git tag tag-one tag tag-three
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 tag 'tag-one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b tag 'tag-three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 tag 'tag-three' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# master branches-default
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f branch 'master' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -1,8 +1,8 @@
|
||||
# master branches-one
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 branch 'one' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -3,9 +3,9 @@
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge branch 'one' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge branch 'three' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge branch 'two' of ../
|
||||
754b754407bf032e9a2f9d5a9ad05ca79a6b228f not-for-merge tag 'tag-master' of ../
|
||||
6c9dec2b923228c9ff994c6cfe4ae16c12408dc5 not-for-merge tag 'tag-master' of ../
|
||||
8e32a6d901327a23ef831511badce7bf3bf46689 not-for-merge tag 'tag-one' of ../
|
||||
22feea448b023a2d864ef94b013735af34d238ba not-for-merge tag 'tag-one-tree' of ../
|
||||
0567da4d5edd2ff4bb292a465ba9e64dcad9536b not-for-merge tag 'tag-three' of ../
|
||||
c61a82b60967180544e3c19f819ddbd0c9f89899 not-for-merge tag 'tag-three' of ../
|
||||
0e3b14047d3ee365f4f2a1b673db059c3972589c not-for-merge tag 'tag-three-file' of ../
|
||||
6134ee8f857693b96ff1cc98d3e2fd62b199e5a8 not-for-merge tag 'tag-two' of ../
|
||||
525b7fb068d59950d185a8779dc957c77eed73ba not-for-merge tag 'tag-two' of ../
|
||||
|
@ -38,8 +38,8 @@ printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 '9 X' >result.1-5-9
|
||||
>empty
|
||||
|
||||
create_merge_msgs () {
|
||||
echo "Merge commit 'c2'" >msg.1-5 &&
|
||||
echo "Merge commit 'c2'; commit 'c3'" >msg.1-5-9 &&
|
||||
echo "Merge tag 'c2'" >msg.1-5 &&
|
||||
echo "Merge tags 'c2' and 'c3'" >msg.1-5-9 &&
|
||||
{
|
||||
echo "Squashed commit of the following:" &&
|
||||
echo &&
|
||||
@ -57,7 +57,7 @@ create_merge_msgs () {
|
||||
} >squash.1-5-9 &&
|
||||
echo >msg.nolog &&
|
||||
{
|
||||
echo "* commit 'c3':" &&
|
||||
echo "* tag 'c3':" &&
|
||||
echo " commit 3" &&
|
||||
echo
|
||||
} >msg.log
|
||||
@ -96,7 +96,11 @@ verify_parents () {
|
||||
|
||||
verify_mergeheads () {
|
||||
printf '%s\n' "$@" >mergehead.expected &&
|
||||
test_cmp mergehead.expected .git/MERGE_HEAD
|
||||
while read sha1 rest
|
||||
do
|
||||
git rev-parse $sha1
|
||||
done <.git/MERGE_HEAD >mergehead.actual &&
|
||||
test_cmp mergehead.expected mergehead.actual
|
||||
}
|
||||
|
||||
verify_no_mergehead () {
|
||||
|
@ -11,7 +11,7 @@ create_merge_msgs() {
|
||||
|
||||
cp exp.subject exp.log &&
|
||||
echo >>exp.log "" &&
|
||||
echo >>exp.log "* commit 'c2':" &&
|
||||
echo >>exp.log "* tag 'c2':" &&
|
||||
echo >>exp.log " c2"
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ test_expect_success 'merge tag' '
|
||||
git checkout master &&
|
||||
test_commit master-3 &&
|
||||
git merge tag-1 &&
|
||||
check_oneline "Merge commit Qtag-1Q"
|
||||
check_oneline "Merge tag Qtag-1Q"
|
||||
'
|
||||
|
||||
test_expect_success 'ambiguous tag' '
|
||||
@ -44,7 +44,7 @@ test_expect_success 'ambiguous tag' '
|
||||
git checkout master &&
|
||||
test_commit master-4 &&
|
||||
git merge ambiguous &&
|
||||
check_oneline "Merge commit QambiguousQ"
|
||||
check_oneline "Merge tag QambiguousQ"
|
||||
'
|
||||
|
||||
test_expect_success 'remote-tracking branch' '
|
||||
|
5
tag.c
5
tag.c
@ -139,6 +139,11 @@ int parse_tag(struct tag *item)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Look at a signed tag object, and return the offset where
|
||||
* the embedded detached signature begins, or the end of the
|
||||
* data when there is no such signature.
|
||||
*/
|
||||
size_t parse_signature(const char *buf, unsigned long size)
|
||||
{
|
||||
char *eol;
|
||||
|
Loading…
Reference in New Issue
Block a user