~ubuntu-branches/ubuntu/intrepid/git-core/intrepid-security

« back to all changes in this revision

Viewing changes to builtin-name-rev.c

  • Committer: Package Import Robot
  • Author(s): Gerrit Pape
  • Date: 2007-10-04 08:27:01 UTC
  • mfrom: (1.1.23)
  • Revision ID: package-import@ubuntu.com-20071004082701-rsd058ontoqz4i30
Tags: 1:1.5.3.4-1
new upstream point release (closes: #445188).

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
 
12
12
typedef struct rev_name {
13
13
        const char *tip_name;
14
 
        int merge_traversals;
15
14
        int generation;
 
15
        int distance;
16
16
} rev_name;
17
17
 
18
18
static long cutoff = LONG_MAX;
19
19
 
 
20
/* How many generations are maximally preferred over _one_ merge traversal? */
 
21
#define MERGE_TRAVERSAL_WEIGHT 65535
 
22
 
20
23
static void name_rev(struct commit *commit,
21
 
                const char *tip_name, int merge_traversals, int generation,
 
24
                const char *tip_name, int generation, int distance,
22
25
                int deref)
23
26
{
24
27
        struct rev_name *name = (struct rev_name *)commit->util;
45
48
                name = xmalloc(sizeof(rev_name));
46
49
                commit->util = name;
47
50
                goto copy_data;
48
 
        } else if (name->merge_traversals > merge_traversals ||
49
 
                        (name->merge_traversals == merge_traversals &&
50
 
                         name->generation > generation)) {
 
51
        } else if (name->distance > distance) {
51
52
copy_data:
52
53
                name->tip_name = tip_name;
53
 
                name->merge_traversals = merge_traversals;
54
54
                name->generation = generation;
 
55
                name->distance = distance;
55
56
        } else
56
57
                return;
57
58
 
74
75
                                sprintf(new_name, "%.*s^%d", len, tip_name,
75
76
                                                parent_number);
76
77
 
77
 
                        name_rev(parents->item, new_name,
78
 
                                merge_traversals + 1 , 0, 0);
 
78
                        name_rev(parents->item, new_name, 0,
 
79
                                distance + MERGE_TRAVERSAL_WEIGHT, 0);
79
80
                } else {
80
 
                        name_rev(parents->item, tip_name, merge_traversals,
81
 
                                generation + 1, 0);
 
81
                        name_rev(parents->item, tip_name, generation + 1,
 
82
                                distance + 1, 0);
82
83
                }
83
84
        }
84
85
}
85
86
 
86
87
struct name_ref_data {
87
88
        int tags_only;
 
89
        int name_only;
88
90
        const char *ref_filter;
89
91
};
90
92
 
112
114
 
113
115
                if (!prefixcmp(path, "refs/heads/"))
114
116
                        path = path + 11;
 
117
                else if (data->tags_only
 
118
                    && data->name_only
 
119
                    && !prefixcmp(path, "refs/tags/"))
 
120
                        path = path + 10;
115
121
                else if (!prefixcmp(path, "refs/"))
116
122
                        path = path + 5;
117
123
 
151
157
{
152
158
        struct object_array revs = { 0, 0, NULL };
153
159
        int as_is = 0, all = 0, transform_stdin = 0;
154
 
        struct name_ref_data data = { 0, NULL };
 
160
        struct name_ref_data data = { 0, 0, NULL };
155
161
 
156
162
        git_config(git_default_config);
157
163
 
167
173
                        if (!strcmp(*argv, "--")) {
168
174
                                as_is = 1;
169
175
                                continue;
 
176
                        } else if (!strcmp(*argv, "--name-only")) {
 
177
                                data.name_only = 1;
 
178
                                continue;
170
179
                        } else if (!strcmp(*argv, "--tags")) {
171
180
                                data.tags_only = 1;
172
181
                                continue;
267
276
                        struct object * obj = get_indexed_object(i);
268
277
                        if (!obj)
269
278
                                continue;
270
 
                        printf("%s %s\n", sha1_to_hex(obj->sha1), get_rev_name(obj));
 
279
                        if (!data.name_only)
 
280
                                printf("%s ", sha1_to_hex(obj->sha1));
 
281
                        printf("%s\n", get_rev_name(obj));
271
282
                }
272
283
        } else {
273
284
                int i;
274
 
                for (i = 0; i < revs.nr; i++)
275
 
                        printf("%s %s\n",
276
 
                                revs.objects[i].name,
277
 
                                get_rev_name(revs.objects[i].item));
 
285
                for (i = 0; i < revs.nr; i++) {
 
286
                        if (!data.name_only)
 
287
                                printf("%s ", revs.objects[i].name);
 
288
                        printf("%s\n", get_rev_name(revs.objects[i].item));
 
289
                }
278
290
        }
279
291
 
280
292
        return 0;
281
293
}
282