Hi Barret, On Thu, 17 Jan 2019, Barret Rhoden wrote: > init_skiplist() took a file consisting of SHA-1s and comments and added > the objects to an oidset. This functionality is useful for other > commands. > > Signed-off-by: Barret Rhoden <brho@xxxxxxxxxx> This patch looks good, I have just one small suggestion: SHA-1's days are counted. We already know the roadmap, that we want to use SHA-256 instead at some stage. Why not talk about "object hashes" instead of "SHA-1s"? Thanks, Johannes > --- > fsck.c | 37 +------------------------------------ > oidset.c | 35 +++++++++++++++++++++++++++++++++++ > oidset.h | 7 +++++++ > 3 files changed, 43 insertions(+), 36 deletions(-) > > diff --git a/fsck.c b/fsck.c > index 68502ce85b11..80b53e6f4968 100644 > --- a/fsck.c > +++ b/fsck.c > @@ -181,41 +181,6 @@ static int fsck_msg_type(enum fsck_msg_id msg_id, > return msg_type; > } > > -static void init_skiplist(struct fsck_options *options, const char *path) > -{ > - FILE *fp; > - struct strbuf sb = STRBUF_INIT; > - struct object_id oid; > - > - fp = fopen(path, "r"); > - if (!fp) > - die("Could not open skip list: %s", path); > - while (!strbuf_getline(&sb, fp)) { > - const char *p; > - const char *hash; > - > - /* > - * Allow trailing comments, leading whitespace > - * (including before commits), and empty or whitespace > - * only lines. > - */ > - hash = strchr(sb.buf, '#'); > - if (hash) > - strbuf_setlen(&sb, hash - sb.buf); > - strbuf_trim(&sb); > - if (!sb.len) > - continue; > - > - if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0') > - die("Invalid SHA-1: %s", sb.buf); > - oidset_insert(&options->skiplist, &oid); > - } > - if (ferror(fp)) > - die_errno("Could not read '%s'", path); > - fclose(fp); > - strbuf_release(&sb); > -} > - > static int parse_msg_type(const char *str) > { > if (!strcmp(str, "error")) > @@ -284,7 +249,7 @@ void fsck_set_msg_types(struct fsck_options *options, const char *values) > if (!strcmp(buf, "skiplist")) { > if (equal == len) > die("skiplist requires a path"); > - init_skiplist(options, buf + equal + 1); > + oidset_parse_file(&options->skiplist, buf + equal + 1); > buf += len + 1; > continue; > } > diff --git a/oidset.c b/oidset.c > index fe4eb921df81..a4f38a040320 100644 > --- a/oidset.c > +++ b/oidset.c > @@ -35,3 +35,38 @@ void oidset_clear(struct oidset *set) > kh_release_oid(&set->set); > oidset_init(set, 0); > } > + > +void oidset_parse_file(struct oidset *set, const char *path) > +{ > + FILE *fp; > + struct strbuf sb = STRBUF_INIT; > + struct object_id oid; > + > + fp = fopen(path, "r"); > + if (!fp) > + die("Could not open skip list: %s", path); > + while (!strbuf_getline(&sb, fp)) { > + const char *p; > + const char *hash; > + > + /* > + * Allow trailing comments, leading whitespace > + * (including before commits), and empty or whitespace > + * only lines. > + */ > + hash = strchr(sb.buf, '#'); > + if (hash) > + strbuf_setlen(&sb, hash - sb.buf); > + strbuf_trim(&sb); > + if (!sb.len) > + continue; > + > + if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0') > + die("Invalid SHA-1: %s", sb.buf); > + oidset_insert(set, &oid); > + } > + if (ferror(fp)) > + die_errno("Could not read '%s'", path); > + fclose(fp); > + strbuf_release(&sb); > +} > diff --git a/oidset.h b/oidset.h > index c9d0f6d3cc8b..a3452eb7de84 100644 > --- a/oidset.h > +++ b/oidset.h > @@ -73,6 +73,13 @@ int oidset_remove(struct oidset *set, const struct object_id *oid); > */ > void oidset_clear(struct oidset *set); > > +/** > + * Add the contents of the file 'path' to an initialized oidset. Each line is > + * an unabbreviated SHA-1. Comments begin with '#', and trailing comments are > + * allowed. Leading whitespace and empty or white-space only lines are ignored. > + */ > +void oidset_parse_file(struct oidset *set, const char *path); > + > struct oidset_iter { > kh_oid_t *set; > khiter_t iter; > -- > 2.20.1.321.g9e740568ce-goog > >