Download raw body.
fix path meta-data used for packing
On Fri, May 20, 2022 at 05:59:58PM +0200, Omar Polo wrote: > Updated diff which moves the "delta seed" up one level so the whole > deltification runs with the same seed. Works fine here. Still produces a valid 1.5GB pack on my test repository, as expected. ok stsp@ > diff refs/heads/main refs/heads/randseeds > blob - 05e57b1f7053a73112d4713be722a197307866e2 > blob + a66c49edad2dad5800dbe4eb0deb37ed923834ac > --- lib/bloom.c > +++ lib/bloom.c > @@ -77,7 +77,7 @@ static int bloom_check_add(struct bloom * bloom, > } > > int hits = 0; > - register unsigned int a = murmurhash2(buffer, len, 0x9747b28c); > + register unsigned int a = murmurhash2(buffer, len, bloom->seed); > register unsigned int b = murmurhash2(buffer, len, a); > register unsigned int x; > register unsigned int i; > @@ -111,6 +111,8 @@ int bloom_init(struct bloom * bloom, int entries, doub > { > bloom->ready = 0; > > + bloom->seed = arc4random(); > + > if (entries < 1000 || error == 0) { > return 1; > } > blob - 28356e3721b9f7902763322750d5a1b87640cd4d > blob + 51c848e8470bd02ed14a2bc377a173e39836239c > --- lib/bloom.h > +++ lib/bloom.h > @@ -52,6 +52,7 @@ struct bloom > int bits; > int bytes; > int hashes; > + uint32_t seed; > > // Fields below are private to the implementation. These may go away or > // change incompatibly at any moment. Client code MUST NOT access or rely > blob - b3bbf0b189575c109c8b935c3519ade298fed3aa > blob + 0674100de40bf388b34dec547fb8529e9ba5096a > --- lib/deltify.c > +++ lib/deltify.c > @@ -88,9 +88,9 @@ static const uint32_t geartab[256] = { > }; > > static uint32_t > -hashblk(const unsigned char *p, off_t n) > +hashblk(const unsigned char *p, off_t n, uint32_t seed) > { > - return murmurhash2(p, n, 0x1d7c5ac3); > + return murmurhash2(p, n, seed); > } > > static const struct got_error * > @@ -237,7 +237,8 @@ addblk_mem(struct got_delta_table *dt, uint8_t *data, > > static const struct got_error * > lookupblk(struct got_delta_block **block, struct got_delta_table *dt, > - unsigned char *p, off_t len, FILE *basefile, off_t basefile_offset0) > + unsigned char *p, off_t len, uint32_t seed, FILE *basefile, > + off_t basefile_offset0) > { > int i; > uint32_t h; > @@ -246,7 +247,7 @@ lookupblk(struct got_delta_block **block, struct got_d > > *block = NULL; > > - h = hashblk(p, len); > + h = hashblk(p, len, seed); > for (i = h % dt->nalloc; dt->blocks[i].len != 0; > i = (i + 1) % dt->nalloc) { > if (dt->blocks[i].hash != h || > @@ -268,7 +269,8 @@ lookupblk(struct got_delta_block **block, struct got_d > > static const struct got_error * > lookupblk_mem(struct got_delta_block **block, struct got_delta_table *dt, > - unsigned char *p, off_t len, uint8_t *basedata, off_t basefile_offset0) > + unsigned char *p, off_t len, uint32_t seed, uint8_t *basedata, > + off_t basefile_offset0) > { > int i; > uint32_t h; > @@ -276,7 +278,7 @@ lookupblk_mem(struct got_delta_block **block, struct g > > *block = NULL; > > - h = hashblk(p, len); > + h = hashblk(p, len, seed); > for (i = h % dt->nalloc; dt->blocks[i].len != 0; > i = (i + 1) % dt->nalloc) { > if (dt->blocks[i].hash != h || > @@ -350,7 +352,7 @@ nextblk_mem(off_t *blocklen, uint8_t *data, off_t file > > const struct got_error * > got_deltify_init(struct got_delta_table **dt, FILE *f, off_t fileoffset, > - off_t filesize) > + off_t filesize, uint32_t seed) > { > const struct got_error *err = NULL; > uint32_t h; > @@ -379,7 +381,7 @@ got_deltify_init(struct got_delta_table **dt, FILE *f, > goto done; > if (blocklen == 0) > break; > - h = hashblk(buf, blocklen); > + h = hashblk(buf, blocklen, seed); > err = addblk(*dt, f, offset0, blocklen, > fileoffset - offset0, h); > if (err) > @@ -400,7 +402,7 @@ done: > > const struct got_error * > got_deltify_init_mem(struct got_delta_table **dt, uint8_t *data, > - off_t fileoffset, off_t filesize) > + off_t fileoffset, off_t filesize, uint32_t seed) > { > const struct got_error *err = NULL; > uint32_t h; > @@ -425,7 +427,7 @@ got_deltify_init_mem(struct got_delta_table **dt, uint > goto done; > if (blocklen == 0) > break; > - h = hashblk(data + fileoffset, blocklen); > + h = hashblk(data + fileoffset, blocklen, seed); > err = addblk_mem(*dt, data, offset0, blocklen, > fileoffset - offset0, h); > if (err) > @@ -621,7 +623,7 @@ stretchblk_mem_mem(uint8_t *basedata, off_t base_offse > > const struct got_error * > got_deltify(struct got_delta_instruction **deltas, int *ndeltas, > - FILE *f, off_t fileoffset, off_t filesize, > + FILE *f, off_t fileoffset, off_t filesize, uint32_t seed, > struct got_delta_table *dt, FILE *basefile, > off_t basefile_offset0, off_t basefile_size) > { > @@ -663,7 +665,7 @@ got_deltify(struct got_delta_instruction **deltas, int > } > break; > } > - err = lookupblk(&block, dt, buf, blocklen, basefile, > + err = lookupblk(&block, dt, buf, blocklen, seed, basefile, > basefile_offset0); > if (err) > break; > @@ -708,7 +710,7 @@ got_deltify(struct got_delta_instruction **deltas, int > > const struct got_error * > got_deltify_file_mem(struct got_delta_instruction **deltas, int *ndeltas, > - FILE *f, off_t fileoffset, off_t filesize, > + FILE *f, off_t fileoffset, off_t filesize, uint32_t seed, > struct got_delta_table *dt, uint8_t *basedata, > off_t basefile_offset0, off_t basefile_size) > { > @@ -750,7 +752,7 @@ got_deltify_file_mem(struct got_delta_instruction **de > } > break; > } > - err = lookupblk_mem(&block, dt, buf, blocklen, basedata, > + err = lookupblk_mem(&block, dt, buf, blocklen, seed, basedata, > basefile_offset0); > if (err) > break; > @@ -795,7 +797,7 @@ got_deltify_file_mem(struct got_delta_instruction **de > > const struct got_error * > got_deltify_mem_file(struct got_delta_instruction **deltas, int *ndeltas, > - uint8_t *data, off_t fileoffset, off_t filesize, > + uint8_t *data, off_t fileoffset, off_t filesize, uint32_t seed, > struct got_delta_table *dt, FILE *basefile, > off_t basefile_offset0, off_t basefile_size) > { > @@ -828,7 +830,7 @@ got_deltify_mem_file(struct got_delta_instruction **de > } > break; > } > - err = lookupblk(&block, dt, data + fileoffset, blocklen, > + err = lookupblk(&block, dt, data + fileoffset, blocklen, seed, > basefile, basefile_offset0); > if (err) > break; > @@ -870,7 +872,7 @@ got_deltify_mem_file(struct got_delta_instruction **de > > const struct got_error * > got_deltify_mem_mem(struct got_delta_instruction **deltas, int *ndeltas, > - uint8_t *data, off_t fileoffset, off_t filesize, > + uint8_t *data, off_t fileoffset, off_t filesize, uint32_t seed, > struct got_delta_table *dt, uint8_t *basedata, > off_t basefile_offset0, off_t basefile_size) > { > @@ -904,7 +906,7 @@ got_deltify_mem_mem(struct got_delta_instruction **del > break; > } > err = lookupblk_mem(&block, dt, data + fileoffset, blocklen, > - basedata, basefile_offset0); > + seed, basedata, basefile_offset0); > if (err) > break; > if (block != NULL) { > blob - 7684d9c73d840e516657120dba99af61a25b5bc0 > blob + 23d51d665edd5927c4b9ca18e2ebebf3473b1795 > --- lib/got_lib_deltify.h > +++ lib/got_lib_deltify.h > @@ -37,27 +37,29 @@ enum { > GOT_DELTIFY_MINCHUNK = 32, > GOT_DELTIFY_MAXCHUNK = 8192, > GOT_DELTIFY_SPLITMASK = (1 << 8) - 1, > - > }; > > const struct got_error *got_deltify_init(struct got_delta_table **dt, FILE *f, > - off_t fileoffset, off_t filesize); > + off_t fileoffset, off_t filesize, uint32_t seed); > const struct got_error *got_deltify_init_mem(struct got_delta_table **dt, > - uint8_t *data, off_t fileoffset, off_t filesize); > + uint8_t *data, off_t fileoffset, off_t filesize, uint32_t seed); > const struct got_error *got_deltify(struct got_delta_instruction **deltas, > - int *ndeltas, FILE *f, off_t fileoffset, off_t filesize, > + int *ndeltas, FILE *f, off_t fileoffset, off_t filesize, uint32_t seed, > struct got_delta_table *dt, FILE *basefile, off_t basefile_offset0, > off_t basefile_size); > const struct got_error *got_deltify_file_mem( > struct got_delta_instruction **deltas, int *ndeltas, > - FILE *f, off_t fileoffset, off_t filesize, struct got_delta_table *dt, > - uint8_t *basedata, off_t basefile_offset0, off_t basefile_size); > + FILE *f, off_t fileoffset, off_t filesize, uint32_t seed, > + struct got_delta_table *dt, uint8_t *basedata, off_t basefile_offset0, > + off_t basefile_size); > const struct got_error *got_deltify_mem_file( > struct got_delta_instruction **deltas, int *ndeltas, > - uint8_t *data, off_t fileoffset, off_t filesize, struct got_delta_table *dt, > - FILE *basefile, off_t basefile_offset0, off_t basefile_size); > + uint8_t *data, off_t fileoffset, off_t filesize, uint32_t seed, > + struct got_delta_table *dt, FILE *basefile, off_t basefile_offset0, > + off_t basefile_size); > const struct got_error *got_deltify_mem_mem( > struct got_delta_instruction **deltas, int *ndeltas, > - uint8_t *data, off_t fileoffset, off_t filesize, struct got_delta_table *dt, > - uint8_t *basedata, off_t basefile_offset0, off_t basefile_size); > + uint8_t *data, off_t fileoffset, off_t filesize, uint32_t seed, > + struct got_delta_table *dt, uint8_t *basedata, off_t basefile_offset0, > + off_t basefile_size); > void got_deltify_free(struct got_delta_table *dt); > blob - d748288cff18ac9179407bbf2ecb771ad11452c2 > blob + bb8a404c064277aaedb6f0a5bd168e7765442df7 > --- lib/pack_create.c > +++ lib/pack_create.c > @@ -51,6 +51,7 @@ > #include "got_lib_object_cache.h" > #include "got_lib_deflate.h" > #include "got_lib_pack.h" > +#include "got_lib_pack_create.h" > #include "got_lib_privsep.h" > #include "got_lib_repository.h" > #include "got_lib_ratelimit.h" > @@ -104,7 +105,7 @@ struct got_pack_metavec { > > static const struct got_error * > alloc_meta(struct got_pack_meta **new, struct got_object_id *id, > - const char *path, int obj_type, time_t mtime) > + const char *path, int obj_type, time_t mtime, uint32_t seed) > { > struct got_pack_meta *m; > > @@ -116,7 +117,7 @@ alloc_meta(struct got_pack_meta **new, struct got_obje > > memcpy(&m->id, id, sizeof(m->id)); > > - m->path_hash = murmurhash2(path, strlen(path), 0xd70af26a); > + m->path_hash = murmurhash2(path, strlen(path), seed); > m->obj_type = obj_type; > m->mtime = mtime; > *new = m; > @@ -682,7 +683,10 @@ pick_deltas(struct got_pack_meta **meta, int nmeta, in > size_t delta_memsize = 0; > const size_t max_delta_memsize = 4 * GOT_DELTA_RESULT_SIZE_CACHED_MAX; > int outfd = -1; > + uint32_t delta_seed; > > + delta_seed = arc4random(); > + > qsort(meta, nmeta, sizeof(struct got_pack_meta *), delta_order_cmp); > for (i = 0; i < nmeta; i++) { > if (cancel_cb) { > @@ -708,10 +712,10 @@ pick_deltas(struct got_pack_meta **meta, int nmeta, in > > if (raw->f == NULL) { > err = got_deltify_init_mem(&m->dtab, raw->data, > - raw->hdrlen, raw->size + raw->hdrlen); > + raw->hdrlen, raw->size + raw->hdrlen, delta_seed); > } else { > err = got_deltify_init(&m->dtab, raw->f, raw->hdrlen, > - raw->size + raw->hdrlen); > + raw->size + raw->hdrlen, delta_seed); > } > if (err) > goto done; > @@ -745,28 +749,28 @@ pick_deltas(struct got_pack_meta **meta, int nmeta, in > if (raw->f == NULL && base_raw->f == NULL) { > err = got_deltify_mem_mem(&deltas, &ndeltas, > raw->data, raw->hdrlen, > - raw->size + raw->hdrlen, > + raw->size + raw->hdrlen, delta_seed, > base->dtab, base_raw->data, > base_raw->hdrlen, > base_raw->size + base_raw->hdrlen); > } else if (raw->f == NULL) { > err = got_deltify_mem_file(&deltas, &ndeltas, > raw->data, raw->hdrlen, > - raw->size + raw->hdrlen, > + raw->size + raw->hdrlen, delta_seed, > base->dtab, base_raw->f, > base_raw->hdrlen, > base_raw->size + base_raw->hdrlen); > } else if (base_raw->f == NULL) { > err = got_deltify_file_mem(&deltas, &ndeltas, > raw->f, raw->hdrlen, > - raw->size + raw->hdrlen, > + raw->size + raw->hdrlen, delta_seed, > base->dtab, base_raw->data, > base_raw->hdrlen, > base_raw->size + base_raw->hdrlen); > } else { > err = got_deltify(&deltas, &ndeltas, > raw->f, raw->hdrlen, > - raw->size + raw->hdrlen, > + raw->size + raw->hdrlen, delta_seed, > base->dtab, base_raw->f, base_raw->hdrlen, > base_raw->size + base_raw->hdrlen); > } > @@ -856,8 +860,8 @@ search_packidx(int *found, struct got_object_id *id, > static const struct got_error * > add_object(int want_meta, struct got_object_idset *idset, > struct got_object_id *id, const char *path, int obj_type, > - time_t mtime, int loose_obj_only, struct got_repository *repo, > - int *ncolored, int *nfound, int *ntrees, > + time_t mtime, uint32_t seed, int loose_obj_only, > + struct got_repository *repo, int *ncolored, int *nfound, int *ntrees, > got_pack_progress_cb progress_cb, void *progress_arg, > struct got_ratelimit *rl) > { > @@ -874,7 +878,7 @@ add_object(int want_meta, struct got_object_idset *ids > } > > if (want_meta) { > - err = alloc_meta(&m, id, path, obj_type, mtime); > + err = alloc_meta(&m, id, path, obj_type, mtime, seed); > if (err) > return err; > > @@ -900,7 +904,7 @@ static const struct got_error * > load_tree_entries(struct got_object_id_queue *ids, int want_meta, > struct got_object_idset *idset, struct got_object_idset *idset_exclude, > struct got_object_id *tree_id, > - const char *dpath, time_t mtime, struct got_repository *repo, > + const char *dpath, time_t mtime, uint32_t seed, struct got_repository *repo, > int loose_obj_only, int *ncolored, int *nfound, int *ntrees, > got_pack_progress_cb progress_cb, void *progress_arg, > struct got_ratelimit *rl, got_cancel_cb cancel_cb, void *cancel_arg) > @@ -953,8 +957,8 @@ load_tree_entries(struct got_object_id_queue *ids, int > } else if (S_ISREG(mode) || S_ISLNK(mode)) { > err = add_object(want_meta, > want_meta ? idset : idset_exclude, id, p, > - GOT_OBJ_TYPE_BLOB, mtime, loose_obj_only, repo, > - ncolored, nfound, ntrees, > + GOT_OBJ_TYPE_BLOB, mtime, seed, loose_obj_only, > + repo, ncolored, nfound, ntrees, > progress_cb, progress_arg, rl); > if (err) > break; > @@ -975,7 +979,7 @@ static const struct got_error * > load_tree(int want_meta, struct got_object_idset *idset, > struct got_object_idset *idset_exclude, > struct got_object_id *tree_id, const char *dpath, time_t mtime, > - struct got_repository *repo, int loose_obj_only, > + uint32_t seed, struct got_repository *repo, int loose_obj_only, > int *ncolored, int *nfound, int *ntrees, > got_pack_progress_cb progress_cb, void *progress_arg, > struct got_ratelimit *rl, got_cancel_cb cancel_cb, void *cancel_arg) > @@ -1022,7 +1026,7 @@ load_tree(int want_meta, struct got_object_idset *idse > > err = add_object(want_meta, want_meta ? idset : idset_exclude, > &qid->id, path, GOT_OBJ_TYPE_TREE, > - mtime, loose_obj_only, repo, > + mtime, seed, loose_obj_only, repo, > ncolored, nfound, ntrees, progress_cb, progress_arg, rl); > if (err) { > free(qid->data); > @@ -1032,7 +1036,7 @@ load_tree(int want_meta, struct got_object_idset *idse > > err = load_tree_entries(&tree_ids, want_meta, idset, > idset_exclude, &qid->id, > - path, mtime, repo, loose_obj_only, ncolored, nfound, > + path, mtime, seed, repo, loose_obj_only, ncolored, nfound, > ntrees, progress_cb, progress_arg, rl, > cancel_cb, cancel_arg); > free(qid->data); > @@ -1050,8 +1054,8 @@ load_tree(int want_meta, struct got_object_idset *idse > static const struct got_error * > load_commit(int want_meta, struct got_object_idset *idset, > struct got_object_idset *idset_exclude, > - struct got_object_id *id, struct got_repository *repo, int loose_obj_only, > - int *ncolored, int *nfound, int *ntrees, > + struct got_object_id *id, struct got_repository *repo, uint32_t seed, > + int loose_obj_only, int *ncolored, int *nfound, int *ntrees, > got_pack_progress_cb progress_cb, void *progress_arg, > struct got_ratelimit *rl, got_cancel_cb cancel_cb, void *cancel_arg) > { > @@ -1077,7 +1081,7 @@ load_commit(int want_meta, struct got_object_idset *id > > err = add_object(want_meta, want_meta ? idset : idset_exclude, > id, "", GOT_OBJ_TYPE_COMMIT, > - got_object_commit_get_committer_time(commit), > + got_object_commit_get_committer_time(commit), seed, > loose_obj_only, repo, > ncolored, nfound, ntrees, progress_cb, progress_arg, rl); > if (err) > @@ -1085,7 +1089,7 @@ load_commit(int want_meta, struct got_object_idset *id > > err = load_tree(want_meta, idset, idset_exclude, > got_object_commit_get_tree_id(commit), > - "", got_object_commit_get_committer_time(commit), > + "", got_object_commit_get_committer_time(commit), seed, > repo, loose_obj_only, ncolored, nfound, ntrees, > progress_cb, progress_arg, rl, cancel_cb, cancel_arg); > done: > @@ -1096,8 +1100,8 @@ done: > static const struct got_error * > load_tag(int want_meta, struct got_object_idset *idset, > struct got_object_idset *idset_exclude, > - struct got_object_id *id, struct got_repository *repo, int loose_obj_only, > - int *ncolored, int *nfound, int *ntrees, > + struct got_object_id *id, struct got_repository *repo, uint32_t seed, > + int loose_obj_only, int *ncolored, int *nfound, int *ntrees, > got_pack_progress_cb progress_cb, void *progress_arg, > struct got_ratelimit *rl, got_cancel_cb cancel_cb, void *cancel_arg) > { > @@ -1123,7 +1127,7 @@ load_tag(int want_meta, struct got_object_idset *idset > > err = add_object(want_meta, want_meta ? idset : idset_exclude, > id, "", GOT_OBJ_TYPE_TAG, > - got_object_tag_get_tagger_time(tag), loose_obj_only, repo, > + got_object_tag_get_tagger_time(tag), seed, loose_obj_only, repo, > ncolored, nfound, ntrees, progress_cb, progress_arg, rl); > if (err) > goto done; > @@ -1131,16 +1135,16 @@ load_tag(int want_meta, struct got_object_idset *idset > switch (got_object_tag_get_object_type(tag)) { > case GOT_OBJ_TYPE_COMMIT: > err = load_commit(want_meta, idset, idset_exclude, > - got_object_tag_get_object_id(tag), repo, loose_obj_only, > - ncolored, nfound, ntrees, progress_cb, progress_arg, rl, > - cancel_cb, cancel_arg); > + got_object_tag_get_object_id(tag), repo, seed, > + loose_obj_only, ncolored, nfound, ntrees, > + progress_cb, progress_arg, rl, cancel_cb, cancel_arg); > break; > case GOT_OBJ_TYPE_TREE: > err = load_tree(want_meta, idset, idset_exclude, > got_object_tag_get_object_id(tag), "", > - got_object_tag_get_tagger_time(tag), repo, loose_obj_only, > - ncolored, nfound, ntrees, progress_cb, progress_arg, rl, > - cancel_cb, cancel_arg); > + got_object_tag_get_tagger_time(tag), seed, repo, > + loose_obj_only, ncolored, nfound, ntrees, > + progress_cb, progress_arg, rl, cancel_cb, cancel_arg); > break; > default: > break; > @@ -1451,8 +1455,9 @@ static const struct got_error * > load_object_ids(int *ncolored, int *nfound, int *ntrees, > struct got_object_idset *idset, struct got_object_id **theirs, int ntheirs, > struct got_object_id **ours, int nours, struct got_repository *repo, > - int loose_obj_only, got_pack_progress_cb progress_cb, void *progress_arg, > - struct got_ratelimit *rl, got_cancel_cb cancel_cb, void *cancel_arg) > + uint32_t seed, int loose_obj_only, got_pack_progress_cb progress_cb, > + void *progress_arg, struct got_ratelimit *rl, got_cancel_cb cancel_cb, > + void *cancel_arg) > { > const struct got_error *err = NULL; > struct got_object_id **ids = NULL; > @@ -1481,14 +1486,14 @@ load_object_ids(int *ncolored, int *nfound, int *ntree > return err; > if (obj_type == GOT_OBJ_TYPE_COMMIT) { > err = load_commit(0, idset, idset_exclude, id, repo, > - loose_obj_only, ncolored, nfound, ntrees, > + seed, loose_obj_only, ncolored, nfound, ntrees, > progress_cb, progress_arg, rl, > cancel_cb, cancel_arg); > if (err) > goto done; > } else if (obj_type == GOT_OBJ_TYPE_TAG) { > err = load_tag(0, idset, idset_exclude, id, repo, > - loose_obj_only, ncolored, nfound, ntrees, > + seed, loose_obj_only, ncolored, nfound, ntrees, > progress_cb, progress_arg, rl, > cancel_cb, cancel_arg); > if (err) > @@ -1497,8 +1502,8 @@ load_object_ids(int *ncolored, int *nfound, int *ntree > } > > for (i = 0; i < nobj; i++) { > - err = load_commit(1, idset, idset_exclude, > - ids[i], repo, loose_obj_only, ncolored, nfound, ntrees, > + err = load_commit(1, idset, idset_exclude, ids[i], repo, > + seed, loose_obj_only, ncolored, nfound, ntrees, > progress_cb, progress_arg, rl, cancel_cb, cancel_arg); > if (err) > goto done; > @@ -1519,7 +1524,7 @@ load_object_ids(int *ncolored, int *nfound, int *ntree > if (obj_type != GOT_OBJ_TYPE_TAG) > continue; > err = load_tag(1, idset, idset_exclude, id, repo, > - loose_obj_only, ncolored, nfound, ntrees, > + seed, loose_obj_only, ncolored, nfound, ntrees, > progress_cb, progress_arg, rl, cancel_cb, cancel_arg); > if (err) > goto done; > @@ -1943,7 +1948,10 @@ got_pack_create(uint8_t *packsha1, FILE *packfile, > struct got_pack_metavec deltify, reuse; > int ncolored = 0, nfound = 0, ntrees = 0; > size_t ndeltify; > + uint32_t seed; > > + seed = arc4random(); > + > memset(&deltify, 0, sizeof(deltify)); > memset(&reuse, 0, sizeof(reuse)); > > @@ -1954,7 +1962,7 @@ got_pack_create(uint8_t *packsha1, FILE *packfile, > return got_error_from_errno("got_object_idset_alloc"); > > err = load_object_ids(&ncolored, &nfound, &ntrees, idset, theirs, > - ntheirs, ours, nours, repo, loose_obj_only, > + ntheirs, ours, nours, repo, seed, loose_obj_only, > progress_cb, progress_arg, &rl, cancel_cb, cancel_arg); > if (err) > goto done; > blob - b4e79453a7e3443c1559612f98ab36e7d8c7ca50 > blob + 7dd83f68e504ef73f57bd63d2341c99537121292 > --- regress/deltify/deltify_test.c > +++ regress/deltify/deltify_test.c > @@ -42,7 +42,10 @@ deltify_abc_axc(void) > struct got_delta_instruction *deltas; > int ndeltas; > int have_nblocks = 0; > + uint32_t seed; > > + seed = arc4random(); > + > base_file = got_opentemp(); > if (base_file == NULL) > return 1; > @@ -71,7 +74,8 @@ deltify_abc_axc(void) > rewind(base_file); > rewind(derived_file); > > - err = got_deltify_init(&dt, base_file, 0, 3 * GOT_DELTIFY_MAXCHUNK); > + err = got_deltify_init(&dt, base_file, 0, 3 * GOT_DELTIFY_MAXCHUNK, > + seed); > if (err) > goto done; > > @@ -85,7 +89,7 @@ deltify_abc_axc(void) > } > > err = got_deltify(&deltas, &ndeltas, derived_file, 0, > - 3 * GOT_DELTIFY_MAXCHUNK, dt, base_file, 0, > + 3 * GOT_DELTIFY_MAXCHUNK, seed, dt, base_file, 0, > 3 * GOT_DELTIFY_MAXCHUNK); > if (err) > goto done; > @@ -133,7 +137,10 @@ deltify_abc_axc_file_mem(void) > struct got_delta_instruction *deltas; > int ndeltas; > int have_nblocks = 0; > + uint32_t seed; > > + seed = arc4random(); > + > derived_file = got_opentemp(); > if (derived_file == NULL) > return 1; > @@ -157,7 +164,8 @@ deltify_abc_axc_file_mem(void) > > rewind(derived_file); > > - err = got_deltify_init_mem(&dt, base_data, 0, 3 * GOT_DELTIFY_MAXCHUNK); > + err = got_deltify_init_mem(&dt, base_data, 0, 3 * GOT_DELTIFY_MAXCHUNK, > + seed); > if (err) > goto done; > > @@ -171,7 +179,7 @@ deltify_abc_axc_file_mem(void) > } > > err = got_deltify_file_mem(&deltas, &ndeltas, derived_file, 0, > - 3 * GOT_DELTIFY_MAXCHUNK, dt, base_data, 0, > + 3 * GOT_DELTIFY_MAXCHUNK, seed, dt, base_data, 0, > 3 * GOT_DELTIFY_MAXCHUNK); > if (err) > goto done; > @@ -218,7 +226,10 @@ deltify_abc_axc_mem_file(void) > struct got_delta_instruction *deltas; > int ndeltas; > int have_nblocks = 0; > + uint32_t seed; > > + seed = arc4random(); > + > base_file = got_opentemp(); > if (base_file == NULL) > return 1; > @@ -242,7 +253,8 @@ deltify_abc_axc_mem_file(void) > > rewind(base_file); > > - err = got_deltify_init(&dt, base_file, 0, 3 * GOT_DELTIFY_MAXCHUNK); > + err = got_deltify_init(&dt, base_file, 0, 3 * GOT_DELTIFY_MAXCHUNK, > + seed); > if (err) > goto done; > > @@ -256,7 +268,7 @@ deltify_abc_axc_mem_file(void) > } > > err = got_deltify_mem_file(&deltas, &ndeltas, derived_file, 0, > - 3 * GOT_DELTIFY_MAXCHUNK, dt, base_file, 0, > + 3 * GOT_DELTIFY_MAXCHUNK, seed, dt, base_file, 0, > 3 * GOT_DELTIFY_MAXCHUNK); > if (err) > goto done; > @@ -304,7 +316,10 @@ deltify_abc_axc_mem_mem(void) > struct got_delta_instruction *deltas; > int ndeltas; > int have_nblocks = 0; > + uint32_t seed; > > + seed = arc4random(); > + > result_file = got_opentemp(); > if (result_file == NULL) > return 1; > @@ -322,7 +337,8 @@ deltify_abc_axc_mem_mem(void) > derived_file[2 * GOT_DELTIFY_MAXCHUNK + i] = 'c'; > } > > - err = got_deltify_init_mem(&dt, base_file, 0, 3 * GOT_DELTIFY_MAXCHUNK); > + err = got_deltify_init_mem(&dt, base_file, 0, 3 * GOT_DELTIFY_MAXCHUNK, > + seed); > if (err) > goto done; > > @@ -336,7 +352,7 @@ deltify_abc_axc_mem_mem(void) > } > > err = got_deltify_mem_mem(&deltas, &ndeltas, derived_file, 0, > - 3 * GOT_DELTIFY_MAXCHUNK, dt, base_file, 0, > + 3 * GOT_DELTIFY_MAXCHUNK, seed, dt, base_file, 0, > 3 * GOT_DELTIFY_MAXCHUNK); > if (err) > goto done; > >
fix path meta-data used for packing