mirror of
https://github.com/git/git
synced 2024-10-05 16:19:28 +00:00
move duplicated ref_newer() to remote.c
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. This is in preparation for being able to call it from builtin-remote.c Signed-off-by: Jay Soffian <jaysoffian@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
454e2025a9
commit
ec8452d5a7
|
@ -1,6 +1,5 @@
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
#include "tag.h"
|
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
#include "pkt-line.h"
|
#include "pkt-line.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
|
@ -84,55 +83,6 @@ static int pack_objects(int fd, struct ref *refs, struct extra_have_objects *ext
|
||||||
return 0;
|
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 struct ref *remote_refs, **remote_tail;
|
||||||
|
|
||||||
static int receive_status(int in, struct ref *refs)
|
static int receive_status(int in, struct ref *refs)
|
||||||
|
|
49
http-push.c
49
http-push.c
|
@ -1843,55 +1843,6 @@ static int is_zero_sha1(const unsigned char *sha1)
|
||||||
return 1;
|
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)
|
static void add_remote_info_ref(struct remote_ls_ctx *ls)
|
||||||
{
|
{
|
||||||
struct strbuf *buf = (struct strbuf *)ls->userData;
|
struct strbuf *buf = (struct strbuf *)ls->userData;
|
||||||
|
|
49
remote.c
49
remote.c
|
@ -5,6 +5,7 @@
|
||||||
#include "diff.h"
|
#include "diff.h"
|
||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
|
#include "tag.h"
|
||||||
|
|
||||||
static struct refspec s_tag_refspec = {
|
static struct refspec s_tag_refspec = {
|
||||||
0,
|
0,
|
||||||
|
@ -1269,6 +1270,54 @@ int resolve_remote_symref(struct ref *ref, struct ref *list)
|
||||||
return 1;
|
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.
|
* Return true if there is anything to report, otherwise false.
|
||||||
*/
|
*/
|
||||||
|
|
1
remote.h
1
remote.h
|
@ -74,6 +74,7 @@ int check_ref_type(const struct ref *ref, int flags);
|
||||||
void free_refs(struct ref *ref);
|
void free_refs(struct ref *ref);
|
||||||
|
|
||||||
int resolve_remote_symref(struct ref *ref, struct ref *list);
|
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.
|
* Removes and frees any duplicate refs in the map.
|
||||||
|
|
Loading…
Reference in a new issue