upload-pack: minor clean-up in multi-ack logic

No changes to what it does, but separating the codepath clearly
with if ... else if ... chain makes it easier to follow.

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/upload-pack.c b/upload-pack.c
index bbd6bd6..35c7ecb 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -351,7 +351,8 @@
 static int get_common_commits(void)
 {
 	static char line[1000];
-	unsigned char sha1[20], last_sha1[20];
+	unsigned char sha1[20];
+	char hex[41], last_hex[41];
 	int len;
 
 	track_object_refs = 0;
@@ -368,21 +369,22 @@
 		}
 		len = strip(line, len);
 		if (!strncmp(line, "have ", 5)) {
-			if (got_sha1(line+5, sha1) &&
-			    (multi_ack || have_obj.nr == 1)) {
-				packet_write(1, "ACK %s%s\n",
-					     sha1_to_hex(sha1),
-					     multi_ack ?  " continue" : "");
-				if (multi_ack)
-					memcpy(last_sha1, sha1, 20);
+			if (got_sha1(line+5, sha1)) {
+				memcpy(hex, sha1_to_hex(sha1), 41);
+				if (multi_ack) {
+					const char *msg = "ACK %s continue\n";
+					packet_write(1, msg, hex);
+					memcpy(last_hex, hex, 41);
+				}
+				else if (have_obj.nr == 1)
+					packet_write(1, "ACK %s\n", hex);
 			}
 			continue;
 		}
 		if (!strcmp(line, "done")) {
 			if (have_obj.nr > 0) {
 				if (multi_ack)
-					packet_write(1, "ACK %s\n",
-							sha1_to_hex(last_sha1));
+					packet_write(1, "ACK %s\n", last_hex);
 				return 0;
 			}
 			packet_write(1, "NAK\n");