mirror of
https://github.com/git/git.git
synced 2026-01-17 14:21:57 +00:00
Merge pull request #1983 from dscho/builtin-rebase-perf-fix
Fix a performance regression in the built-in rebase
This commit is contained in:
@@ -368,6 +368,7 @@ static void add_var(struct strbuf *buf, const char *name, const char *value)
|
||||
|
||||
#define RESET_HEAD_DETACH (1<<0)
|
||||
#define RESET_HEAD_HARD (1<<1)
|
||||
#define RESET_HEAD_REFS_ONLY (1<<2)
|
||||
|
||||
static int reset_head(struct object_id *oid, const char *action,
|
||||
const char *switch_to_branch, unsigned flags,
|
||||
@@ -375,6 +376,7 @@ static int reset_head(struct object_id *oid, const char *action,
|
||||
{
|
||||
unsigned detach_head = flags & RESET_HEAD_DETACH;
|
||||
unsigned reset_hard = flags & RESET_HEAD_HARD;
|
||||
unsigned refs_only = flags & RESET_HEAD_REFS_ONLY;
|
||||
struct object_id head_oid;
|
||||
struct tree_desc desc[2] = { { NULL }, { NULL } };
|
||||
struct lock_file lock = LOCK_INIT;
|
||||
@@ -390,7 +392,7 @@ static int reset_head(struct object_id *oid, const char *action,
|
||||
if (switch_to_branch && !starts_with(switch_to_branch, "refs/"))
|
||||
BUG("Not a fully qualified branch: '%s'", switch_to_branch);
|
||||
|
||||
if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
|
||||
if (!refs_only && hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
|
||||
ret = -1;
|
||||
goto leave_reset_head;
|
||||
}
|
||||
@@ -403,6 +405,9 @@ static int reset_head(struct object_id *oid, const char *action,
|
||||
if (!oid)
|
||||
oid = &head_oid;
|
||||
|
||||
if (flags & RESET_HEAD_REFS_ONLY)
|
||||
goto reset_head_refs;
|
||||
|
||||
memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
|
||||
setup_unpack_trees_porcelain(&unpack_tree_opts, action);
|
||||
unpack_tree_opts.head_idx = 1;
|
||||
@@ -443,6 +448,7 @@ static int reset_head(struct object_id *oid, const char *action,
|
||||
goto leave_reset_head;
|
||||
}
|
||||
|
||||
reset_head_refs:
|
||||
reflog_action = getenv(GIT_REFLOG_ACTION_ENVIRONMENT);
|
||||
strbuf_addf(&msg, "%s: ", reflog_action ? reflog_action : "rebase");
|
||||
prefix_len = msg.len;
|
||||
|
||||
Reference in New Issue
Block a user