Move oidset_parse_file() to oidset.c

Signed-off-by: Barret Rhoden <brho@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Barret Rhoden
2019-05-15 17:44:57 -04:00
committed by Junio C Hamano
parent 24eb33ebc5
commit f93895f8fc
3 changed files with 43 additions and 35 deletions

View File

@ -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 object name list: %s", path);
while (!strbuf_getline(&sb, fp)) {
const char *p;
const char *name;
/*
* Allow trailing comments, leading whitespace
* (including before commits), and empty or whitespace
* only lines.
*/
name = strchr(sb.buf, '#');
if (name)
strbuf_setlen(&sb, name - sb.buf);
strbuf_trim(&sb);
if (!sb.len)
continue;
if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
die("invalid object name: %s", sb.buf);
oidset_insert(set, &oid);
}
if (ferror(fp))
die_errno("Could not read '%s'", path);
fclose(fp);
strbuf_release(&sb);
}