git-svn: fix show-ignore when not connected to the repository root
[gitweb.git] / revision.c
index 622afe3aa6277220a934a500cbb0f83723f75989..f5b8ae4f031a059cff08328cf661515b9e68ccec 100644 (file)
@@ -116,6 +116,8 @@ void mark_parents_uninteresting(struct commit *commit)
 
 void add_pending_object(struct rev_info *revs, struct object *obj, const char *name)
 {
+       if (revs->no_walk && (obj->flags & UNINTERESTING))
+               die("object ranges do not make sense when not walking revisions");
        add_object_array(obj, name, &revs->pending);
        if (revs->reflog_info && obj->type == OBJ_COMMIT)
                add_reflog_for_walk(revs->reflog_info,
@@ -480,7 +482,7 @@ static int handle_one_ref(const char *path, const unsigned char *sha1, int flag,
        struct all_refs_cb *cb = cb_data;
        struct object *object = get_reference(cb->all_revs, path, sha1,
                                              cb->all_flags);
-       add_pending_object(cb->all_revs, object, "");
+       add_pending_object(cb->all_revs, object, path);
        return 0;
 }
 
@@ -1233,9 +1235,15 @@ static struct commit *get_revision_1(struct rev_info *revs)
                 */
                if (!revs->limited) {
                        if (revs->max_age != -1 &&
-                           (commit->date < revs->max_age))
-                               continue;
-                       add_parents_to_list(revs, commit, &revs->commits);
+                           (commit->date < revs->max_age)) {
+                               if (revs->boundary)
+                                       commit->object.flags |=
+                                               BOUNDARY_SHOW | BOUNDARY;
+                               else
+                                       continue;
+                       } else
+                               add_parents_to_list(revs, commit,
+                                               &revs->commits);
                }
                if (commit->object.flags & SHOWN)
                        continue;
@@ -1336,7 +1344,18 @@ struct commit *get_revision(struct rev_info *revs)
        case -1:
                break;
        case 0:
-               return NULL;
+               if (revs->boundary) {
+                       struct commit_list *list = revs->commits;
+                       while (list) {
+                               list->item->object.flags |=
+                                       BOUNDARY_SHOW | BOUNDARY;
+                               list = list->next;
+                       }
+                       /* all remaining commits are boundary commits */
+                       revs->max_count = -1;
+                       revs->limited = 1;
+               } else
+                       return NULL;
        default:
                revs->max_count--;
        }