diff options
| -rw-r--r-- | builtin-reflog.c | 17 | 
1 files changed, 16 insertions, 1 deletions
diff --git a/builtin-reflog.c b/builtin-reflog.c index f685d76e8d..280e24e151 100644 --- a/builtin-reflog.c +++ b/builtin-reflog.c @@ -15,7 +15,7 @@  static const char reflog_expire_usage[] =  "git-reflog (show|expire) [--verbose] [--dry-run] [--stale-fix] [--expire=<time>] [--expire-unreachable=<time>] [--all] <refs>...";  static const char reflog_delete_usage[] = -"git-reflog delete [--verbose] [--dry-run] [--rewrite] <refs>..."; +"git-reflog delete [--verbose] [--dry-run] [--rewrite] [--updateref] <refs>...";  static unsigned long default_reflog_expire;  static unsigned long default_reflog_expire_unreachable; @@ -25,6 +25,7 @@ struct cmd_reflog_expire_cb {  	int dry_run;  	int stalefix;  	int rewrite; +	int updateref;  	int verbose;  	unsigned long expire_total;  	unsigned long expire_unreachable; @@ -292,10 +293,20 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,  			status |= error("%s: %s", strerror(errno),  					newlog_path);  			unlink(newlog_path); +		} else if (cmd->updateref && +			(write_in_full(lock->lock_fd, +				sha1_to_hex(cb.last_kept_sha1), 40) != 40 || +			 write_in_full(lock->lock_fd, "\n", 1) != 1 || +			 close_ref(lock) < 0)) { +			status |= error("Couldn't write %s", +				lock->lk->filename); +			unlink(newlog_path);  		} else if (rename(newlog_path, log_file)) {  			status |= error("cannot rename %s to %s",  					newlog_path, log_file);  			unlink(newlog_path); +		} else if (cmd->updateref && commit_ref(lock)) { +			status |= error("Couldn't set %s", lock->ref_name);  		}  	}  	free(newlog_path); @@ -372,6 +383,8 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)  			cb.stalefix = 1;  		else if (!strcmp(arg, "--rewrite"))  			cb.rewrite = 1; +		else if (!strcmp(arg, "--updateref")) +			cb.updateref = 1;  		else if (!strcmp(arg, "--all"))  			do_all = 1;  		else if (!strcmp(arg, "--verbose")) @@ -443,6 +456,8 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)  			cb.dry_run = 1;  		else if (!strcmp(arg, "--rewrite"))  			cb.rewrite = 1; +		else if (!strcmp(arg, "--updateref")) +			cb.updateref = 1;  		else if (!strcmp(arg, "--verbose"))  			cb.verbose = 1;  		else if (!strcmp(arg, "--")) {  | 
