Commit c455c87c authored by Johannes Schindelin's avatar Johannes Schindelin Committed by Junio C Hamano

Rename path_list to string_list

The name path_list was correct for the first usage of that data structure,
but it really is a general-purpose string list.

$ perl -i -pe 's/path-list/string-list/g' $(git grep -l path-list)
$ perl -i -pe 's/path_list/string_list/g' $(git grep -l path_list)
$ git mv path-list.h string-list.h
$ git mv path-list.c string-list.c
$ perl -i -pe 's/has_path/has_string/g' $(git grep -l has_path)
$ perl -i -pe 's/path/string/g' string-list.[ch]
$ git mv Documentation/technical/api-path-list.txt \
	Documentation/technical/api-string-list.txt
$ perl -i -pe 's/strdup_paths/strdup_strings/g' $(git grep -l strdup_paths)

... and then fix all users of string-list to access the member "string"
instead of "path".

Documentation/technical/api-string-list.txt needed some rewrapping, too.
Signed-off-by: Johannes Schindelin's avatarJohannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
parent 51ef1daa
......@@ -105,7 +105,7 @@ For C programs:
- Use the API. No, really. We have a strbuf (variable length
string), several arrays with the ALLOC_GROW() macro, a
path_list for sorted string lists, a hash map (mapping struct
string_list for sorted string lists, a hash map (mapping struct
objects) named "struct decorate", amongst other things.
- When you come up with an API, document it.
......
path-list API
=============
string-list API
===============
The path_list API offers a data structure and functions to handle sorted
The string_list API offers a data structure and functions to handle sorted
and unsorted string lists.
The name is a bit misleading, a path_list may store not only paths but
strings in general.
The 'string_list' struct used to be called 'path_list', but was renamed
because it is not specific to paths.
The caller:
. Allocates and clears a `struct path_list` variable.
. Allocates and clears a `struct string_list` variable.
. Initializes the members. You might want to set the flag `strdup_paths`
. Initializes the members. You might want to set the flag `strdup_strings`
if the strings should be strdup()ed. For example, this is necessary
when you add something like git_path("..."), since that function returns
a static buffer that will change with the next call to git_path().
......@@ -20,25 +20,26 @@ If you need something advanced, you can manually malloc() the `items`
member (you need this if you add things later) and you should set the
`nr` and `alloc` members in that case, too.
. Adds new items to the list, using `path_list_append` or `path_list_insert`.
. Adds new items to the list, using `string_list_append` or
`string_list_insert`.
. Can check if a string is in the list using `path_list_has_path` or
`unsorted_path_list_has_path` and get it from the list using
`path_list_lookup` for sorted lists.
. Can check if a string is in the list using `string_list_has_string` or
`unsorted_string_list_has_string` and get it from the list using
`string_list_lookup` for sorted lists.
. Can sort an unsorted list using `sort_path_list`.
. Can sort an unsorted list using `sort_string_list`.
. Finally it should free the list using `path_list_clear`.
. Finally it should free the list using `string_list_clear`.
Example:
----
struct path_list list;
struct string_list list;
int i;
memset(&list, 0, sizeof(struct path_list));
path_list_append("foo", &list);
path_list_append("bar", &list);
memset(&list, 0, sizeof(struct string_list));
string_list_append("foo", &list);
string_list_append("bar", &list);
for (i = 0; i < list.nr; i++)
printf("%s\n", list.items[i].path)
----
......@@ -48,7 +49,7 @@ afterwards, instead of building a sorted list (`O(n log n)` instead of
`O(n^2)`).
+
However, if you use the list to check if a certain string was added
already, you should not do that (using unsorted_path_list_has_path()),
already, you should not do that (using unsorted_string_list_has_string()),
because the complexity would be quadratic again (but with a worse factor).
Functions
......@@ -56,52 +57,53 @@ Functions
* General ones (works with sorted and unsorted lists as well)
`print_path_list`::
`print_string_list`::
Dump a path_list to stdout, useful mainly for debugging purposes. It
Dump a string_list to stdout, useful mainly for debugging purposes. It
can take an optional header argument and it writes out the
string-pointer pairs of the path_list, each one in its own line.
string-pointer pairs of the string_list, each one in its own line.
`path_list_clear`::
`string_list_clear`::
Free a path_list. The `path` pointer of the items will be freed in case
the `strdup_paths` member of the path_list is set. The second parameter
controls if the `util` pointer of the items should be freed or not.
Free a string_list. The `string` pointer of the items will be freed in
case the `strdup_strings` member of the string_list is set. The second
parameter controls if the `util` pointer of the items should be freed
or not.
* Functions for sorted lists only
`path_list_has_path`::
`string_list_has_string`::
Determine if the path_list has a given string or not.
Determine if the string_list has a given string or not.
`path_list_insert`::
`string_list_insert`::
Insert a new element to the path_list. The returned pointer can be handy
if you want to write something to the `util` pointer of the
path_list_item containing the just added string.
Insert a new element to the string_list. The returned pointer can be
handy if you want to write something to the `util` pointer of the
string_list_item containing the just added string.
+
Since this function uses xrealloc() (which die()s if it fails) if the
list needs to grow, it is safe not to check the pointer. I.e. you may
write `path_list_insert(...)->util = ...;`.
write `string_list_insert(...)->util = ...;`.
`path_list_lookup`::
`string_list_lookup`::
Look up a given string in the path_list, returning the containing
path_list_item. If the string is not found, NULL is returned.
Look up a given string in the string_list, returning the containing
string_list_item. If the string is not found, NULL is returned.
* Functions for unsorted lists only
`path_list_append`::
`string_list_append`::
Append a new string to the end of the path_list.
Append a new string to the end of the string_list.
`sort_path_list`::
`sort_string_list`::
Make an unsorted list sorted.
`unsorted_path_list_has_path`::
`unsorted_string_list_has_string`::
It's like `path_list_has_path()` but for unsorted lists.
It's like `string_list_has_string()` but for unsorted lists.
+
This function needs to look through all items, as opposed to its
counterpart for sorted lists, which performs a binary search.
......@@ -109,12 +111,12 @@ counterpart for sorted lists, which performs a binary search.
Data structures
---------------
* `struct path_list_item`
* `struct string_list_item`
Represents an item of the list. The `path` member is a pointer to the
string, and you may use the `util` member for any purpose, if you want.
* `struct path_list`
* `struct string_list`
Represents the list itself.
......@@ -122,5 +124,5 @@ Represents the list itself.
. The `nr` member contains the number of items stored in the list.
. The `alloc` member is used to avoid reallocating at every insertion.
You should not tamper with it.
. Setting the `strdup_paths` member to 1 will strdup() the strings
. Setting the `strdup_strings` member to 1 will strdup() the strings
before adding them, see above.
......@@ -356,7 +356,7 @@ LIB_H += pack-refs.h
LIB_H += pack-revindex.h
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += path-list.h
LIB_H += string-list.h
LIB_H += pkt-line.h
LIB_H += progress.h
LIB_H += quote.h
......@@ -437,7 +437,7 @@ LIB_OBJS += pager.o
LIB_OBJS += parse-options.o
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path-list.o
LIB_OBJS += string-list.o
LIB_OBJS += path.o
LIB_OBJS += pkt-line.o
LIB_OBJS += pretty.o
......
......@@ -12,7 +12,7 @@
#include "blob.h"
#include "delta.h"
#include "builtin.h"
#include "path-list.h"
#include "string-list.h"
/*
* --check turns on checking that the working tree matches the
......@@ -194,7 +194,7 @@ struct image {
* the case where more than one patches touch the same file.
*/
static struct path_list fn_table;
static struct string_list fn_table;
static uint32_t hash_line(const char *cp, size_t len)
{
......@@ -2250,12 +2250,12 @@ static int read_file_or_gitlink(struct cache_entry *ce, struct strbuf *buf)
static struct patch *in_fn_table(const char *name)
{
struct path_list_item *item;
struct string_list_item *item;
if (name == NULL)
return NULL;
item = path_list_lookup(name, &fn_table);
item = string_list_lookup(name, &fn_table);
if (item != NULL)
return (struct patch *)item->util;
......@@ -2264,7 +2264,7 @@ static struct patch *in_fn_table(const char *name)
static void add_to_fn_table(struct patch *patch)
{
struct path_list_item *item;
struct string_list_item *item;
/*
* Always add new_name unless patch is a deletion
......@@ -2272,7 +2272,7 @@ static void add_to_fn_table(struct patch *patch)
* file creations and copies
*/
if (patch->new_name != NULL) {
item = path_list_insert(patch->new_name, &fn_table);
item = string_list_insert(patch->new_name, &fn_table);
item->util = patch;
}
......@@ -2281,7 +2281,7 @@ static void add_to_fn_table(struct patch *patch)
* later chunks shouldn't patch old names
*/
if ((patch->new_name == NULL) || (patch->is_rename)) {
item = path_list_insert(patch->old_name, &fn_table);
item = string_list_insert(patch->old_name, &fn_table);
item->util = (struct patch *) -1;
}
}
......@@ -3051,7 +3051,7 @@ static int apply_patch(int fd, const char *filename, int options)
int skipped_patch = 0;
/* FIXME - memory leak when using multiple patch files as inputs */
memset(&fn_table, 0, sizeof(struct path_list));
memset(&fn_table, 0, sizeof(struct string_list));
strbuf_init(&buf, 0);
patch_input_file = filename;
read_patch_file(&buf, fd);
......
......@@ -16,7 +16,7 @@
#include "quote.h"
#include "xdiff-interface.h"
#include "cache-tree.h"
#include "path-list.h"
#include "string-list.h"
#include "mailmap.h"
#include "parse-options.h"
......@@ -40,7 +40,7 @@ static int blank_boundary;
static int incremental;
static int cmd_is_annotate;
static int xdl_opts = XDF_NEED_MINIMAL;
static struct path_list mailmap;
static struct string_list mailmap;
#ifndef DEBUG
#define DEBUG 0
......@@ -1926,7 +1926,7 @@ static void sanity_check_refcnt(struct scoreboard *sb)
* Used for the command line parsing; check if the path exists
* in the working tree.
*/
static int has_path_in_work_tree(const char *path)
static int has_string_in_work_tree(const char *path)
{
struct stat st;
return !lstat(path, &st);
......@@ -2390,14 +2390,14 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
if (argc < 2)
usage_with_options(blame_opt_usage, options);
path = add_prefix(prefix, argv[argc - 1]);
if (argc == 3 && !has_path_in_work_tree(path)) { /* (2b) */
if (argc == 3 && !has_string_in_work_tree(path)) { /* (2b) */
path = add_prefix(prefix, argv[1]);
argv[1] = argv[2];
}
argv[argc - 1] = "--";
setup_work_tree();
if (!has_path_in_work_tree(path))
if (!has_string_in_work_tree(path))
die("cannot stat path %s: %s", path, strerror(errno));
}
......
......@@ -21,7 +21,7 @@
#include "strbuf.h"
#include "utf8.h"
#include "parse-options.h"
#include "path-list.h"
#include "string-list.h"
#include "rerere.h"
#include "unpack-trees.h"
......@@ -150,7 +150,7 @@ static int commit_index_files(void)
* Take a union of paths in the index and the named tree (typically, "HEAD"),
* and return the paths that match the given pattern in list.
*/
static int list_paths(struct path_list *list, const char *with_tree,
static int list_paths(struct string_list *list, const char *with_tree,
const char *prefix, const char **pattern)
{
int i;
......@@ -169,24 +169,24 @@ static int list_paths(struct path_list *list, const char *with_tree,
continue;
if (!pathspec_match(pattern, m, ce->name, 0))
continue;
path_list_insert(ce->name, list);
string_list_insert(ce->name, list);
}
return report_path_error(m, pattern, prefix ? strlen(prefix) : 0);
}
static void add_remove_files(struct path_list *list)
static void add_remove_files(struct string_list *list)
{
int i;
for (i = 0; i < list->nr; i++) {
struct stat st;
struct path_list_item *p = &(list->items[i]);
struct string_list_item *p = &(list->items[i]);
if (!lstat(p->path, &st)) {
if (add_to_cache(p->path, &st, 0))
if (!lstat(p->string, &st)) {
if (add_to_cache(p->string, &st, 0))
die("updating files failed");
} else
remove_file_from_cache(p->path);
remove_file_from_cache(p->string);
}
}
......@@ -221,7 +221,7 @@ static void create_base_index(void)
static char *prepare_index(int argc, const char **argv, const char *prefix)
{
int fd;
struct path_list partial;
struct string_list partial;
const char **pathspec = NULL;
if (interactive) {
......@@ -305,7 +305,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
die("cannot do a partial commit during a merge.");
memset(&partial, 0, sizeof(partial));
partial.strdup_paths = 1;
partial.strdup_strings = 1;
if (list_paths(&partial, initial_commit ? NULL : "HEAD", prefix, pathspec))
exit(1);
......
......@@ -13,7 +13,7 @@
#include "log-tree.h"
#include "revision.h"
#include "decorate.h"
#include "path-list.h"
#include "string-list.h"
#include "utf8.h"
#include "parse-options.h"
......@@ -309,7 +309,7 @@ static void handle_tag(const char *name, struct tag *tag)
}
static void get_tags_and_duplicates(struct object_array *pending,
struct path_list *extra_refs)
struct string_list *extra_refs)
{
struct tag *tag;
int i;
......@@ -330,7 +330,7 @@ static void get_tags_and_duplicates(struct object_array *pending,
case OBJ_TAG:
tag = (struct tag *)e->item;
while (tag && tag->object.type == OBJ_TAG) {
path_list_insert(full_name, extra_refs)->util = tag;
string_list_insert(full_name, extra_refs)->util = tag;
tag = (struct tag *)tag->tagged;
}
if (!tag)
......@@ -350,19 +350,19 @@ static void get_tags_and_duplicates(struct object_array *pending,
}
if (commit->util)
/* more than one name for the same object */
path_list_insert(full_name, extra_refs)->util = commit;
string_list_insert(full_name, extra_refs)->util = commit;
else
commit->util = full_name;
}
}
static void handle_tags_and_duplicates(struct path_list *extra_refs)
static void handle_tags_and_duplicates(struct string_list *extra_refs)
{
struct commit *commit;
int i;
for (i = extra_refs->nr - 1; i >= 0; i--) {
const char *name = extra_refs->items[i].path;
const char *name = extra_refs->items[i].string;
struct object *object = extra_refs->items[i].util;
switch (object->type) {
case OBJ_TAG:
......@@ -445,7 +445,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
{
struct rev_info revs;
struct object_array commits = { 0, 0, NULL };
struct path_list extra_refs = { NULL, 0, 0, 0 };
struct string_list extra_refs = { NULL, 0, 0, 0 };
struct commit *commit;
char *export_filename = NULL, *import_filename = NULL;
struct option options[] = {
......
......@@ -5,7 +5,7 @@
#include "refs.h"
#include "commit.h"
#include "builtin.h"
#include "path-list.h"
#include "string-list.h"
#include "remote.h"
#include "transport.h"
#include "run-command.h"
......@@ -465,8 +465,8 @@ static int fetch_refs(struct transport *transport, struct ref *ref_map)
static int add_existing(const char *refname, const unsigned char *sha1,
int flag, void *cbdata)
{
struct path_list *list = (struct path_list *)cbdata;
path_list_insert(refname, list);
struct string_list *list = (struct string_list *)cbdata;
string_list_insert(refname, list);
return 0;
}
......@@ -485,8 +485,8 @@ static void find_non_local_tags(struct transport *transport,
struct ref **head,
struct ref ***tail)
{
struct path_list existing_refs = { NULL, 0, 0, 0 };
struct path_list new_refs = { NULL, 0, 0, 1 };
struct string_list existing_refs = { NULL, 0, 0, 0 };
struct string_list new_refs = { NULL, 0, 0, 1 };
char *ref_name;
int ref_name_len;
const unsigned char *ref_sha1;
......@@ -515,11 +515,11 @@ static void find_non_local_tags(struct transport *transport,
}
}
if (!path_list_has_path(&existing_refs, ref_name) &&
!path_list_has_path(&new_refs, ref_name) &&
if (!string_list_has_string(&existing_refs, ref_name) &&
!string_list_has_string(&new_refs, ref_name) &&
(has_sha1_file(ref->old_sha1) ||
will_fetch(head, ref->old_sha1))) {
path_list_insert(ref_name, &new_refs);
string_list_insert(ref_name, &new_refs);
rm = alloc_ref_from_str(ref_name);
rm->peer_ref = alloc_ref_from_str(ref_name);
......@@ -530,8 +530,8 @@ static void find_non_local_tags(struct transport *transport,
}
free(ref_name);
}
path_list_clear(&existing_refs, 0);
path_list_clear(&new_refs, 0);
string_list_clear(&existing_refs, 0);
string_list_clear(&new_refs, 0);
}
static int do_fetch(struct transport *transport,
......
......@@ -6,7 +6,7 @@
*/
#include "cache.h"
#include "builtin.h"
#include "path-list.h"
#include "string-list.h"
static const char git_mailsplit_usage[] =
"git mailsplit [-d<prec>] [-f<n>] [-b] -o<directory> [<mbox>|<Maildir>...]";
......@@ -115,7 +115,7 @@ static int split_one(FILE *mbox, const char *name, int allow_bare)
exit(1);
}
static int populate_maildir_list(struct path_list *list, const char *path)
static int populate_maildir_list(struct string_list *list, const char *path)
{
DIR *dir;
struct dirent *dent;
......@@ -136,7 +136,7 @@ static int populate_maildir_list(struct path_list *list, const char *path)
if (dent->d_name[0] == '.')
continue;
snprintf(name, sizeof(name), "%s/%s", *sub, dent->d_name);
path_list_insert(name, list);
string_list_insert(name, list);
}
closedir(dir);
......@@ -152,14 +152,14 @@ static int split_maildir(const char *maildir, const char *dir,
char name[PATH_MAX];
int ret = -1;
int i;
struct path_list list = {NULL, 0, 0, 1};
struct string_list list = {NULL, 0, 0, 1};
if (populate_maildir_list(&list, maildir) < 0)
goto out;
for (i = 0; i < list.nr; i++) {
FILE *f;
snprintf(file, sizeof(file), "%s/%s", maildir, list.items[i].path);
snprintf(file, sizeof(file), "%s/%s", maildir, list.items[i].string);
f = fopen(file, "r");
if (!f) {
error("cannot open mail %s (%s)", file, strerror(errno));
......@@ -179,7 +179,7 @@ static int split_maildir(const char *maildir, const char *dir,
ret = skip;
out:
path_list_clear(&list, 1);
string_list_clear(&list, 1);
return ret;
}
......
This diff is collapsed.
......@@ -7,7 +7,7 @@
#include "builtin.h"
#include "dir.h"
#include "cache-tree.h"
#include "path-list.h"
#include "string-list.h"
#include "parse-options.h"
static const char * const builtin_mv_usage[] = {
......@@ -36,13 +36,14 @@ static const char **copy_pathspec(const char *prefix, const char **pathspec,
return get_pathspec(prefix, result);
}
static void show_list(const char *label, struct path_list *list)
static void show_list(const char *label, struct string_list *list)
{
if (list->nr > 0) {
int i;
printf("%s", label);
for (i = 0; i < list->nr; i++)
printf("%s%s", i > 0 ? ", " : "", list->items[i].path);
printf("%s%s", i > 0 ? ", " : "",
list->items[i].string);
putchar('\n');
}
}
......@@ -75,11 +76,11 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
const char **source, **destination, **dest_path;
enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX } *modes;
struct stat st;
struct path_list overwritten = {NULL, 0, 0, 0};
struct path_list src_for_dst = {NULL, 0, 0, 0};
struct path_list added = {NULL, 0, 0, 0};
struct path_list deleted = {NULL, 0, 0, 0};
struct path_list changed = {NULL, 0, 0, 0};
struct string_list overwritten = {NULL, 0, 0, 0};
struct string_list src_for_dst = {NULL, 0, 0, 0};
struct string_list added = {NULL, 0, 0, 0};
struct string_list deleted = {NULL, 0, 0, 0};
struct string_list changed = {NULL, 0, 0, 0};
git_config(git_default_config, NULL);
......@@ -189,16 +190,16 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
" will overwrite!\n",
bad);
bad = NULL;
path_list_insert(dst, &overwritten);
string_list_insert(dst, &overwritten);
} else
bad = "Cannot overwrite";
}
} else if (cache_name_pos(src, length) < 0)
bad = "not under version control";
else if (path_list_has_path(&src_for_dst, dst))
else if (string_list_has_string(&src_for_dst, dst))
bad = "multiple sources for the same target";
else
path_list_insert(dst, &src_for_dst);
string_list_insert(dst, &src_for_dst);
if (bad) {
if (ignore_errors) {
......@@ -228,15 +229,15 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
continue;
if (cache_name_pos(src, strlen(src)) >= 0) {
path_list_insert(src, &deleted);
string_list_insert(src, &deleted);
/* destination can be a directory with 1 file inside */
if (path_list_has_path(&overwritten, dst))
path_list_insert(dst, &changed);
if (string_list_has_string(&overwritten, dst))
string_list_insert(dst, &changed);
else
path_list_insert(dst, &added);
string_list_insert(dst, &added);
} else
path_list_insert(dst, &added);
string_list_insert(dst, &added);
}
if (show_only) {
......@@ -245,7 +246,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
show_list("Deleting : ", &deleted);
} else {
for (i = 0; i < changed.nr; i++) {
const char *path = changed.items[i].path;
const char *path = changed.items[i].string;
int j = cache_name_pos(path, strlen(path));
struct cache_entry *ce = active_cache[j];
......@@ -255,13 +256,13 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
}
for (i = 0; i < added.nr; i++) {
const char *path = added.items[i].path;
const char *path = added.items[i].string;
if (add_file_to_cache(path, verbose ? ADD_CACHE_VERBOSE : 0))
die("updating index entries failed");
}
for (i = 0; i < deleted.nr; i++)
remove_file_from_cache(deleted.items[i].path);
remove_file_from_cache(deleted.items[i].string);
if (active_cache_changed) {
if (write_cache(newfd, active_cache, active_nr) ||
......
This diff is collapsed.
#include "builtin.h"
#include "cache.h"
#include "path-list.h"
#include "string-list.h"
#include "rerere.h"
#include "xdiff/xdiff.h"
#include "xdiff-interface.h"
......@@ -48,9 +48,9 @@ static int git_rerere_gc_config(const char *var, const char *value, void *cb)
return 0;
}
static void garbage_collect(struct path_list *rr)
static void garbage_collect(struct string_list *rr)
{
struct path_list to_remove = { NULL, 0, 0, 1 };
struct string_list to_remove = { NULL, 0, 0, 1 };
DIR *dir;
struct dirent *e;
int i, cutoff;
......@@ -69,11 +69,11 @@ static void garbage_collect(struct path_list *rr)
cutoff = (has_resolution(name)
? cutoff_resolve : cutoff_noresolve);
if (then < now - cutoff * 86400)
path_list_append(name, &to_remove);
string_list_append(name, &to_remove);
}
for (i = 0; i < to_remove.nr; i++)
unlink_rr_item(to_remove.items[i].path);
path_list_clear(&to_remove, 0);
unlink_rr_item(to_remove.items[i].string);
string_list_clear(&to_remove, 0);
}
static int outf(void *dummy, mmbuffer_t *ptr, int nbuf)
......@@ -111,7 +111,7 @@ static int diff_two(const char *file1, const char *label1,
int cmd_rerere(int argc, const char **argv, const char *prefix)
{
struct path_list merge_rr = { NULL, 0, 0, 1 };
struct string_list merge_rr = { NULL, 0, 0, 1 };
int i, fd;
if (argc < 2)
......@@ -132,16 +132,16 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)
garbage_collect(&merge_rr);
else if (!strcmp(argv[1], "status"))
for (i = 0; i < merge_rr.nr; i++)
printf("%s\n", merge_rr.items[i].path);
printf("%s\n", merge_rr.items[i].string);
else if (!strcmp(argv[1], "diff"))
for (i = 0; i < merge_rr.nr; i++) {
const char *path = merge_rr.items[i].path;
const char *path = merge_rr.items[i].string;
const char *name = (const char *)merge_rr.items[i].util;
diff_two(rr_path(name, "preimage"), path, path, path);
}
else
usage(git_rerere_usage);
path_list_clear(&merge_rr, 1);
string_list_clear(&merge_rr, 1);
return 0;
}
......@@ -2,7 +2,7 @@
#include "cache.h"
#include "commit.h"
#include "diff.h"
#include "path-list.h"
#include "string-list.h"
#include "revision.h"
#include "utf8.h"
#include "mailmap.h"
......@@ -18,8 +18,8 @@ static char const * const shortlog_usage[] = {
static int compare_by_number(const void *a1, const void *a2)
{
const struct path_list_item *i1 = a1, *i2 = a2;
const struct path_list *l1 = i1->util, *l2 = i2->util;
const struct string_list_item *i1 = a1, *i2 = a2;
const struct string_list *l1 = i1->util, *l2 = i2->util;
if (l1->nr < l2->nr)
return 1;
......@@ -35,8 +35,8 @@ static void insert_one_record(struct shortlog *log,
{
const char *dot3 = log->common_repo_prefix;
char *buffer, *p;
struct path_list_item *item;
struct path_list *onelines;
struct string_list_item *item;
struct string_list *onelines;
char namebuf[1024];
size_t len;