From: Jay Soffian <jaysoffian@gmail.com>
To: git@vger.kernel.org
Cc: Jay Soffian <jaysoffian@gmail.com>,
Marc Branchaud <marcnarc@xiplink.com>,
Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>
Subject: [PATCH v2 09/13] refactor duplicated ref_newer() to remote.c
Date: Mon, 23 Feb 2009 02:29:31 -0500 [thread overview]
Message-ID: <1235374171-92523-1-git-send-email-jaysoffian@gmail.com> (raw)
In-Reply-To: <20090223064510.GA24517@coredump.intra.peff.net>
ref_newer() appears to have been copied from builtin-send-pack.c to
http-push.c via cut and paste. This patch moves the function and its
helper unmark_and_free() to remote.c. There was a slight difference
between the two implementations, one used TMP_MARK for the mark, the
other used 1. Per Jeff King, I went with TMP_MARK as more correct.
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
On Mon, Feb 23, 2009 at 1:45 AM, Jeff King <peff@peff.net> wrote:
> I think the TMP_MARK one is probably better. At the very least, the
> send-pack one should be using SEEN instead of a bare '1'. But given that
> it is not part of the usual revision machinery, it seems like that was
> what TMP_MARK was designed for.
Okay then. This replaces the previous in the series using TMP_MARK
instead, otherwise identical.
j.
builtin-send-pack.c | 49 -------------------------------------------------
http-push.c | 49 -------------------------------------------------
remote.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
remote.h | 1 +
4 files changed, 50 insertions(+), 98 deletions(-)
diff --git a/builtin-send-pack.c b/builtin-send-pack.c
index 2fbfc29..186cecb 100644
--- a/builtin-send-pack.c
+++ b/builtin-send-pack.c
@@ -84,55 +84,6 @@ static int pack_objects(int fd, struct ref *refs, struct extra_have_objects *ext
return 0;
}
-static void unmark_and_free(struct commit_list *list, unsigned int mark)
-{
- while (list) {
- struct commit_list *temp = list;
- temp->item->object.flags &= ~mark;
- list = temp->next;
- free(temp);
- }
-}
-
-static int ref_newer(const unsigned char *new_sha1,
- const unsigned char *old_sha1)
-{
- struct object *o;
- struct commit *old, *new;
- struct commit_list *list, *used;
- int found = 0;
-
- /* Both new and old must be commit-ish and new is descendant of
- * old. Otherwise we require --force.
- */
- o = deref_tag(parse_object(old_sha1), NULL, 0);
- if (!o || o->type != OBJ_COMMIT)
- return 0;
- old = (struct commit *) o;
-
- o = deref_tag(parse_object(new_sha1), NULL, 0);
- if (!o || o->type != OBJ_COMMIT)
- return 0;
- new = (struct commit *) o;
-
- if (parse_commit(new) < 0)
- return 0;
-
- used = list = NULL;
- commit_list_insert(new, &list);
- while (list) {
- new = pop_most_recent_commit(&list, 1);
- commit_list_insert(new, &used);
- if (new == old) {
- found = 1;
- break;
- }
- }
- unmark_and_free(list, 1);
- unmark_and_free(used, 1);
- return found;
-}
-
static struct ref *remote_refs, **remote_tail;
static int receive_status(int in, struct ref *refs)
diff --git a/http-push.c b/http-push.c
index cfeed81..392533a 100644
--- a/http-push.c
+++ b/http-push.c
@@ -1843,55 +1843,6 @@ static int is_zero_sha1(const unsigned char *sha1)
return 1;
}
-static void unmark_and_free(struct commit_list *list, unsigned int mark)
-{
- while (list) {
- struct commit_list *temp = list;
- temp->item->object.flags &= ~mark;
- list = temp->next;
- free(temp);
- }
-}
-
-static int ref_newer(const unsigned char *new_sha1,
- const unsigned char *old_sha1)
-{
- struct object *o;
- struct commit *old, *new;
- struct commit_list *list, *used;
- int found = 0;
-
- /* Both new and old must be commit-ish and new is descendant of
- * old. Otherwise we require --force.
- */
- o = deref_tag(parse_object(old_sha1), NULL, 0);
- if (!o || o->type != OBJ_COMMIT)
- return 0;
- old = (struct commit *) o;
-
- o = deref_tag(parse_object(new_sha1), NULL, 0);
- if (!o || o->type != OBJ_COMMIT)
- return 0;
- new = (struct commit *) o;
-
- if (parse_commit(new) < 0)
- return 0;
-
- used = list = NULL;
- commit_list_insert(new, &list);
- while (list) {
- new = pop_most_recent_commit(&list, TMP_MARK);
- commit_list_insert(new, &used);
- if (new == old) {
- found = 1;
- break;
- }
- }
- unmark_and_free(list, TMP_MARK);
- unmark_and_free(used, TMP_MARK);
- return found;
-}
-
static void add_remote_info_ref(struct remote_ls_ctx *ls)
{
struct strbuf *buf = (struct strbuf *)ls->userData;
diff --git a/remote.c b/remote.c
index 2c010a1..d0053d5 100644
--- a/remote.c
+++ b/remote.c
@@ -5,6 +5,7 @@
#include "diff.h"
#include "revision.h"
#include "dir.h"
+#include "tag.h"
static struct refspec s_tag_refspec = {
0,
@@ -1271,6 +1272,54 @@ int resolve_remote_symref(struct ref *ref, struct ref *list)
return 1;
}
+static void unmark_and_free(struct commit_list *list, unsigned int mark)
+{
+ while (list) {
+ struct commit_list *temp = list;
+ temp->item->object.flags &= ~mark;
+ list = temp->next;
+ free(temp);
+ }
+}
+
+int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1)
+{
+ struct object *o;
+ struct commit *old, *new;
+ struct commit_list *list, *used;
+ int found = 0;
+
+ /* Both new and old must be commit-ish and new is descendant of
+ * old. Otherwise we require --force.
+ */
+ o = deref_tag(parse_object(old_sha1), NULL, 0);
+ if (!o || o->type != OBJ_COMMIT)
+ return 0;
+ old = (struct commit *) o;
+
+ o = deref_tag(parse_object(new_sha1), NULL, 0);
+ if (!o || o->type != OBJ_COMMIT)
+ return 0;
+ new = (struct commit *) o;
+
+ if (parse_commit(new) < 0)
+ return 0;
+
+ used = list = NULL;
+ commit_list_insert(new, &list);
+ while (list) {
+ new = pop_most_recent_commit(&list, TMP_MARK);
+ commit_list_insert(new, &used);
+ if (new == old) {
+ found = 1;
+ break;
+ }
+ }
+ unmark_and_free(list, TMP_MARK);
+ unmark_and_free(used, TMP_MARK);
+ return found;
+}
+
/*
* Return true if there is anything to report, otherwise false.
*/
diff --git a/remote.h b/remote.h
index 41b7ac2..e14d041 100644
--- a/remote.h
+++ b/remote.h
@@ -76,6 +76,7 @@ int check_ref_type(const struct ref *ref, int flags);
void free_refs(struct ref *ref);
int resolve_remote_symref(struct ref *ref, struct ref *list);
+int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1);
/*
* Removes and frees any duplicate refs in the map.
--
1.6.2.rc1.223.gfed32
next prev parent reply other threads:[~2009-02-23 7:31 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-23 6:28 [PATCH 00/13] New output style for git remote show Jay Soffian
2009-02-23 6:28 ` [PATCH 01/13] remote: rename variable and eliminate redundant function call Jay Soffian
2009-02-23 6:28 ` [PATCH 02/13] remote: remove unused code in get_ref_states Jay Soffian
2009-02-23 6:28 ` [PATCH 03/13] remote: fix two inconsistencies in the output of "show <remote>" Jay Soffian
2009-02-23 6:28 ` [PATCH 04/13] remote: make get_remote_ref_states() always populate states.tracked Jay Soffian
2009-02-24 1:34 ` Junio C Hamano
2009-02-24 3:09 ` Jay Soffian
2009-02-24 3:13 ` Jay Soffian
2009-02-23 6:28 ` [PATCH 05/13] remote: name remote_refs consistently Jay Soffian
2009-02-23 6:28 ` [PATCH 06/13] string-list: new for_each_string_list() function Jay Soffian
2009-02-23 6:28 ` [PATCH 07/13] remote: new show output style Jay Soffian
2009-02-23 6:46 ` Jeff King
2009-02-23 23:11 ` Marc Branchaud
2009-02-23 6:28 ` [PATCH 08/13] refactor duplicated get_local_heads() to remote.c Jay Soffian
2009-02-23 6:28 ` [PATCH 09/13] refactor duplicated ref_newer() " Jay Soffian
2009-02-23 6:45 ` Jeff King
2009-02-23 7:29 ` Jay Soffian [this message]
2009-02-23 8:53 ` [PATCH v2 " Johannes Sixt
2009-02-23 13:41 ` Jay Soffian
2009-02-23 6:28 ` [PATCH 10/13] remote.c: make match_refs() copy src ref before assigning to peer_ref Jay Soffian
2009-02-24 1:34 ` Junio C Hamano
2009-02-24 3:06 ` Jay Soffian
2009-02-24 3:23 ` Junio C Hamano
2009-02-24 4:05 ` [PATCH] " Jay Soffian
2009-02-24 6:17 ` Junio C Hamano
2009-02-24 6:53 ` Jay Soffian
2009-02-24 7:12 ` Junio C Hamano
2009-02-23 6:28 ` [PATCH 11/13] remote.c: don't short-circuit match_refs() when error in match_explicit_refs() Jay Soffian
2009-02-24 1:34 ` Junio C Hamano
2009-02-24 3:07 ` Jay Soffian
2009-02-23 6:29 ` [PATCH 12/13] remote.c: refactor get_remote_ref_states() Jay Soffian
2009-02-23 6:50 ` Jeff King
2009-02-23 7:55 ` Jay Soffian
2009-02-23 8:31 ` Jay Soffian
2009-02-24 1:05 ` Jeff King
2009-02-23 6:29 ` [PATCH 13/13] remote: new show output style for push refspecs Jay Soffian
2009-02-23 6:59 ` [PATCH 00/13] New output style for git remote show Jeff King
2009-02-23 7:56 ` Jay Soffian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1235374171-92523-1-git-send-email-jaysoffian@gmail.com \
--to=jaysoffian@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=marcnarc@xiplink.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.