int git_reference_symbolic_create_matching( git_reference **ref_out, git_repository *repo, const char *name, const char *target, int force, const char *old_target, const git_signature *signature, const char *log_message) { int error; git_signature *who = NULL; assert(target); if (!signature) { if ((error = git_reference__log_signature(&who, repo)) < 0) return error; else signature = who; } error = reference__create( ref_out, repo, name, NULL, target, force, signature, log_message, NULL, old_target); git_signature_free(who); return error; }
static int copy_common(transaction_node *node, git_transaction *tx, const git_signature *sig, const char *msg) { if (sig && git_signature__pdup(&node->sig, sig, &tx->pool) < 0) return -1; if (!node->sig) { git_signature *tmp; int error; if (git_reference__log_signature(&tmp, tx->repo) < 0) return -1; /* make sure the sig we use is in our pool */ error = git_signature__pdup(&node->sig, tmp, &tx->pool); git_signature_free(tmp); if (error < 0) return error; } if (msg) { node->message = git_pool_strdup(&tx->pool, msg); GITERR_CHECK_ALLOC(node->message); } return 0; }
int git_reference_create_matching( git_reference **ref_out, git_repository *repo, const char *name, const git_oid *id, int force, const git_oid *old_id, const git_signature *signature, const char *log_message) { int error; git_signature *who = NULL; assert(id); if (!signature) { if ((error = git_reference__log_signature(&who, repo)) < 0) return error; else signature = who; } error = reference__create( ref_out, repo, name, id, NULL, force, signature, log_message, old_id, NULL); git_signature_free(who); return error; }
int git_reference_rename( git_reference **out, git_reference *ref, const char *new_name, int force, const char *log_message) { git_signature *who; int error; if ((error = git_reference__log_signature(&who, ref->db->repo)) < 0) return error; error = reference__rename(out, ref, new_name, force, who, log_message); git_signature_free(who); return error; }
/* * Starting with the reference given by `ref_name`, follows symbolic * references until a direct reference is found and updated the OID * on that direct reference to `oid`. */ int git_reference__update_terminal( git_repository *repo, const char *ref_name, const git_oid *oid, const git_signature *sig, const char *log_message) { git_reference *ref = NULL, *ref2 = NULL; git_signature *who = NULL; const git_signature *to_use; int error = 0; if (!sig && (error = git_reference__log_signature(&who, repo)) < 0) return error; to_use = sig ? sig : who; error = get_terminal(&ref, repo, ref_name, 0); /* found a dangling symref */ if (error == GIT_ENOTFOUND && ref) { assert(git_reference_type(ref) == GIT_REF_SYMBOLIC); giterr_clear(); error = reference__create(&ref2, repo, ref->target.symbolic, oid, NULL, 0, to_use, log_message, NULL, NULL); } else if (error == GIT_ENOTFOUND) { giterr_clear(); error = reference__create(&ref2, repo, ref_name, oid, NULL, 0, to_use, log_message, NULL, NULL); } else if (error == 0) { assert(git_reference_type(ref) == GIT_REF_OID); error = reference__create(&ref2, repo, ref->name, oid, NULL, 1, to_use, log_message, &ref->target.oid, NULL); } git_reference_free(ref2); git_reference_free(ref); git_signature_free(who); return error; }