grep.c: remove implicit dependency on the_index
[gitweb.git] / line-log.c
index 545ad0f28bce0ac0f92a31019b92f7ef8a668356..35adf199a5d8741b4a11bf9d6d20450274aaa04d 100644 (file)
@@ -151,29 +151,29 @@ static void range_set_union(struct range_set *out,
 
        assert(out->nr == 0);
        while (i < a->nr || j < b->nr) {
-               struct range *new;
+               struct range *new_range;
                if (i < a->nr && j < b->nr) {
                        if (ra[i].start < rb[j].start)
-                               new = &ra[i++];
+                               new_range = &ra[i++];
                        else if (ra[i].start > rb[j].start)
-                               new = &rb[j++];
+                               new_range = &rb[j++];
                        else if (ra[i].end < rb[j].end)
-                               new = &ra[i++];
+                               new_range = &ra[i++];
                        else
-                               new = &rb[j++];
+                               new_range = &rb[j++];
                } else if (i < a->nr)      /* b exhausted */
-                       new = &ra[i++];
+                       new_range = &ra[i++];
                else                       /* a exhausted */
-                       new = &rb[j++];
-               if (new->start == new->end)
+                       new_range = &rb[j++];
+               if (new_range->start == new_range->end)
                        ; /* empty range */
-               else if (!out->nr || out->ranges[out->nr-1].end < new->start) {
+               else if (!out->nr || out->ranges[out->nr-1].end < new_range->start) {
                        range_set_grow(out, 1);
-                       out->ranges[out->nr].start = new->start;
-                       out->ranges[out->nr].end = new->end;
+                       out->ranges[out->nr].start = new_range->start;
+                       out->ranges[out->nr].end = new_range->end;
                        out->nr++;
-               } else if (out->ranges[out->nr-1].end < new->end) {
-                       out->ranges[out->nr-1].end = new->end;
+               } else if (out->ranges[out->nr-1].end < new_range->end) {
+                       out->ranges[out->nr-1].end = new_range->end;
                }
        }
 }
@@ -479,7 +479,7 @@ static struct commit *check_single_commit(struct rev_info *revs)
                struct object *obj = revs->pending.objects[i].item;
                if (obj->flags & UNINTERESTING)
                        continue;
-               obj = deref_tag(obj, NULL, 0);
+               obj = deref_tag(the_repository, obj, NULL, 0);
                if (obj->type != OBJ_COMMIT)
                        die("Non commit %s?", revs->pending.objects[i].name);
                if (commit)
@@ -501,15 +501,16 @@ static void fill_blob_sha1(struct commit *commit, struct diff_filespec *spec)
        unsigned mode;
        struct object_id oid;
 
-       if (get_tree_entry(commit->object.oid.hash, spec->path,
-                          oid.hash, &mode))
+       if (get_tree_entry(&commit->object.oid, spec->path, &oid, &mode))
                die("There is no path %s in the commit", spec->path);
        fill_filespec(spec, &oid, 1, mode);
 
        return;
 }
 
-static void fill_line_ends(struct diff_filespec *spec, long *lines,
+static void fill_line_ends(struct repository *r,
+                          struct diff_filespec *spec,
+                          long *lines,
                           unsigned long **line_ends)
 {
        int num = 0, size = 50;
@@ -517,7 +518,7 @@ static void fill_line_ends(struct diff_filespec *spec, long *lines,
        unsigned long *ends = NULL;
        char *data = NULL;
 
-       if (diff_populate_filespec(spec, 0))
+       if (diff_populate_filespec(r, spec, 0))
                die("Cannot read blob %s", oid_to_hex(&spec->oid));
 
        ALLOC_ARRAY(ends, size);
@@ -556,7 +557,8 @@ static const char *nth_line(void *data, long line)
 }
 
 static struct line_log_data *
-parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
+parse_lines(struct repository *r, struct commit *commit,
+           const char *prefix, struct string_list *args)
 {
        long lines = 0;
        unsigned long *ends = NULL;
@@ -584,7 +586,7 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
 
                spec = alloc_filespec(full_name);
                fill_blob_sha1(commit, spec);
-               fill_line_ends(spec, &lines, &ends);
+               fill_line_ends(r, spec, &lines, &ends);
                cb_data.spec = spec;
                cb_data.lines = lines;
                cb_data.line_ends = ends;
@@ -599,11 +601,11 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
                                    lines, anchor, &begin, &end,
                                    full_name))
                        die("malformed -L argument '%s'", range_part);
-               if (lines < end || ((lines || begin) && lines < begin))
+               if ((!lines && (begin || end)) || lines < begin)
                        die("file %s has only %lu lines", name_part, lines);
                if (begin < 1)
                        begin = 1;
-               if (end < 1)
+               if (end < 1 || lines < end)
                        end = lines;
                begin--;
                line_log_data_insert(&ranges, full_name, begin, end);
@@ -696,18 +698,18 @@ static struct line_log_data *line_log_data_merge(struct line_log_data *a,
 static void add_line_range(struct rev_info *revs, struct commit *commit,
                           struct line_log_data *range)
 {
-       struct line_log_data *old = NULL;
-       struct line_log_data *new = NULL;
+       struct line_log_data *old_line = NULL;
+       struct line_log_data *new_line = NULL;
 
-       old = lookup_decoration(&revs->line_log_data, &commit->object);
-       if (old && range) {
-               new = line_log_data_merge(old, range);
-               free_line_log_data(old);
+       old_line = lookup_decoration(&revs->line_log_data, &commit->object);
+       if (old_line && range) {
+               new_line = line_log_data_merge(old_line, range);
+               free_line_log_data(old_line);
        } else if (range)
-               new = line_log_data_copy(range);
+               new_line = line_log_data_copy(range);
 
-       if (new)
-               add_decoration(&revs->line_log_data, &commit->object, new);
+       if (new_line)
+               add_decoration(&revs->line_log_data, &commit->object, new_line);
 }
 
 static void clear_commit_line_range(struct rev_info *revs, struct commit *commit)
@@ -740,7 +742,7 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_list
        struct line_log_data *range;
 
        commit = check_single_commit(rev);
-       range = parse_lines(commit, prefix, args);
+       range = parse_lines(rev->diffopt.repo, commit, prefix, args);
        add_line_range(rev, commit, range);
 
        if (!rev->diffopt.detect_rename) {
@@ -817,8 +819,8 @@ static void queue_diffs(struct line_log_data *range,
        assert(commit);
 
        DIFF_QUEUE_CLEAR(&diff_queued_diff);
-       diff_tree_oid(parent ? &parent->tree->object.oid : NULL,
-                     &commit->tree->object.oid, "", opt);
+       diff_tree_oid(parent ? get_commit_tree_oid(parent) : NULL,
+                     get_commit_tree_oid(commit), "", opt);
        if (opt->detect_rename) {
                filter_diffs_for_paths(range, 1);
                if (diff_might_be_rename())
@@ -892,8 +894,8 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
                return;
 
        if (pair->one->oid_valid)
-               fill_line_ends(pair->one, &p_lines, &p_ends);
-       fill_line_ends(pair->two, &t_lines, &t_ends);
+               fill_line_ends(rev->diffopt.repo, pair->one, &p_lines, &p_ends);
+       fill_line_ends(rev->diffopt.repo, pair->two, &t_lines, &t_ends);
 
        fprintf(opt->file, "%s%sdiff --git a/%s b/%s%s\n", prefix, c_meta, pair->one->path, pair->two->path, c_reset);
        fprintf(opt->file, "%s%s--- %s%s%s\n", prefix, c_meta,
@@ -1009,12 +1011,12 @@ static int process_diff_filepair(struct rev_info *rev,
                return 0;
 
        assert(pair->two->oid_valid);
-       diff_populate_filespec(pair->two, 0);
+       diff_populate_filespec(rev->diffopt.repo, pair->two, 0);
        file_target.ptr = pair->two->data;
        file_target.size = pair->two->size;
 
        if (pair->one->oid_valid) {
-               diff_populate_filespec(pair->one, 0);
+               diff_populate_filespec(rev->diffopt.repo, pair->one, 0);
                file_parent.ptr = pair->one->data;
                file_parent.size = pair->one->size;
        } else {
@@ -1042,12 +1044,12 @@ static int process_diff_filepair(struct rev_info *rev,
 
 static struct diff_filepair *diff_filepair_dup(struct diff_filepair *pair)
 {
-       struct diff_filepair *new = xmalloc(sizeof(struct diff_filepair));
-       new->one = pair->one;
-       new->two = pair->two;
-       new->one->count++;
-       new->two->count++;
-       return new;
+       struct diff_filepair *new_filepair = xmalloc(sizeof(struct diff_filepair));
+       new_filepair->one = pair->one;
+       new_filepair->two = pair->two;
+       new_filepair->one->count++;
+       new_filepair->two->count++;
+       return new_filepair;
 }
 
 static void free_diffqueues(int n, struct diff_queue_struct *dq)