projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
include header to define uint32_t, necessary on Mac OS X
[git.git]
/
fetch.c
diff --git
a/fetch.c
b/fetch.c
index
a1748e0
..
73bde07
100644
(file)
--- a/
fetch.c
+++ b/
fetch.c
@@
-15,6
+15,7
@@
int get_tree = 0;
int get_history = 0;
int get_all = 0;
int get_verbosely = 0;
int get_history = 0;
int get_all = 0;
int get_verbosely = 0;
+int get_recover = 0;
static unsigned char current_commit_sha1[20];
void pull_say(const char *fmt, const char *hex)
static unsigned char current_commit_sha1[20];
void pull_say(const char *fmt, const char *hex)
@@
-48,16
+49,16
@@
static int process_tree(struct tree *tree)
struct tree_entry_list *next = entry->next;
if (process(entry->item.any))
return -1;
struct tree_entry_list *next = entry->next;
if (process(entry->item.any))
return -1;
+ free(entry->name);
free(entry);
entry = next;
}
return 0;
}
free(entry);
entry = next;
}
return 0;
}
-#define COMPLETE 1U
-#define TO_FETCH 2U
-#define TO_SCAN 4U
-#define SEEN 16U
+#define COMPLETE (1U << 0)
+#define SEEN (1U << 1)
+#define TO_SCAN (1U << 2)
static struct commit_list *complete = NULL;
static struct commit_list *complete = NULL;
@@
-135,23
+136,16
@@
static int process(struct object *obj)
obj->flags |= SEEN;
if (has_sha1_file(obj->sha1)) {
obj->flags |= SEEN;
if (has_sha1_file(obj->sha1)) {
- parse_object(obj->sha1);
/* We already have it, so we should scan it now. */
/* We already have it, so we should scan it now. */
- if (obj->flags & TO_SCAN)
- return 0;
- object_list_insert(obj, process_queue_end);
- process_queue_end = &(*process_queue_end)->next;
obj->flags |= TO_SCAN;
obj->flags |= TO_SCAN;
- return 0;
+ } else {
+ if (obj->flags & COMPLETE)
+ return 0;
+ prefetch(obj->sha1);
}
}
- if (obj->flags & (COMPLETE | TO_FETCH))
- return 0;
+
object_list_insert(obj, process_queue_end);
process_queue_end = &(*process_queue_end)->next;
object_list_insert(obj, process_queue_end);
process_queue_end = &(*process_queue_end)->next;
- obj->flags |= TO_FETCH;
-
- prefetch(obj->sha1);
-
return 0;
}
return 0;
}
@@
-171,7
+165,7
@@
static int loop(void)
* the queue because we needed to fetch it first.
*/
if (! (obj->flags & TO_SCAN)) {
* the queue because we needed to fetch it first.
*/
if (! (obj->flags & TO_SCAN)) {
- if (
!has_sha1_file(obj->sha1) &&
fetch(obj->sha1)) {
+ if (fetch(obj->sha1)) {
report_missing(obj->type
? obj->type
: "object", obj->sha1);
report_missing(obj->type
? obj->type
: "object", obj->sha1);
@@
-214,13
+208,16
@@
int pull(char *target)
int fd = -1;
save_commit_buffer = 0;
int fd = -1;
save_commit_buffer = 0;
+ track_object_refs = 0;
if (write_ref && current_ref) {
fd = lock_ref_sha1(write_ref, current_ref);
if (fd < 0)
return -1;
}
if (write_ref && current_ref) {
fd = lock_ref_sha1(write_ref, current_ref);
if (fd < 0)
return -1;
}
- for_each_ref(mark_complete);
+ if (!get_recover) {
+ for_each_ref(mark_complete);
+ }
if (interpret_target(target, sha1))
return error("Could not interpret %s as something to pull",
if (interpret_target(target, sha1))
return error("Could not interpret %s as something to pull",