[PATCH 07/19] reset.c: extract function for updating {ORIG,}HEAD

2013-01-09 Thread Martin von Zweigbergk
By extracting the code for updating the HEAD and ORIG_HEAD symbolic
references to a separate function, we declutter cmd_reset() a bit and
we make it clear that e.g. the four variables {,sha1_}{,old_}orig are
only used by this code.
---
 builtin/reset.c | 39 +++
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 68be05c..4d556e7 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -239,16 +239,35 @@ const char **parse_args(int argc, const char **argv, 
const char *prefix, const c
return *argv ? get_pathspec(prefix, argv) : NULL;
 }
 
+static int update_refs(const char *rev, const unsigned char *sha1) {
+   int update_ref_status;
+   struct strbuf msg = STRBUF_INIT;
+   unsigned char *orig = NULL, sha1_orig[20],
+   *old_orig = NULL, sha1_old_orig[20];
+
+   if (!get_sha1(ORIG_HEAD, sha1_old_orig))
+   old_orig = sha1_old_orig;
+   if (!get_sha1(HEAD, sha1_orig)) {
+   orig = sha1_orig;
+   set_reflog_message(msg, updating ORIG_HEAD, NULL);
+   update_ref(msg.buf, ORIG_HEAD, orig, old_orig, 0, MSG_ON_ERR);
+   }
+   else if (old_orig)
+   delete_ref(ORIG_HEAD, old_orig, 0);
+   set_reflog_message(msg, updating HEAD, rev);
+   update_ref_status = update_ref(msg.buf, HEAD, sha1, orig, 0, 
MSG_ON_ERR);
+   strbuf_release(msg);
+   return update_ref_status;
+}
+
 int cmd_reset(int argc, const char **argv, const char *prefix)
 {
int reset_type = NONE, update_ref_status = 0, quiet = 0;
int patch_mode = 0;
const char *rev;
-   unsigned char sha1[20], *orig = NULL, sha1_orig[20],
-   *old_orig = NULL, sha1_old_orig[20];
+   unsigned char sha1[20];
const char **pathspec = NULL;
struct commit *commit;
-   struct strbuf msg = STRBUF_INIT;
const struct option options[] = {
OPT__QUIET(quiet, N_(be quiet, only report errors)),
OPT_SET_INT(0, mixed, reset_type,
@@ -332,17 +351,7 @@ int cmd_reset(int argc, const char **argv, const char 
*prefix)
 
/* Any resets update HEAD to the head being switched to,
 * saving the previous head in ORIG_HEAD before. */
-   if (!get_sha1(ORIG_HEAD, sha1_old_orig))
-   old_orig = sha1_old_orig;
-   if (!get_sha1(HEAD, sha1_orig)) {
-   orig = sha1_orig;
-   set_reflog_message(msg, updating ORIG_HEAD, NULL);
-   update_ref(msg.buf, ORIG_HEAD, orig, old_orig, 0, MSG_ON_ERR);
-   }
-   else if (old_orig)
-   delete_ref(ORIG_HEAD, old_orig, 0);
-   set_reflog_message(msg, updating HEAD, rev);
-   update_ref_status = update_ref(msg.buf, HEAD, sha1, orig, 0, 
MSG_ON_ERR);
+   update_ref_status = update_refs(rev, sha1);
 
switch (reset_type) {
case HARD:
@@ -359,7 +368,5 @@ int cmd_reset(int argc, const char **argv, const char 
*prefix)
 
remove_branch_state();
 
-   strbuf_release(msg);
-
return update_ref_status;
 }
-- 
1.8.1.rc3.331.g1ef2165

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 07/19] reset.c: extract function for updating {ORIG,}HEAD

2013-01-09 Thread Matt Kraai
In the summary, {ORIG,} should be {ORIG_,}.

-- 
Matt
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html