| 256 | } |
| 257 | |
| 258 | static int migrate_paths(struct tmp_objdir *t, |
| 259 | struct strbuf *src, struct strbuf *dst, |
| 260 | enum finalize_object_file_flags flags) |
| 261 | { |
| 262 | size_t src_len = src->len, dst_len = dst->len; |
| 263 | struct string_list paths = STRING_LIST_INIT_DUP; |
| 264 | int ret = 0; |
| 265 | |
| 266 | if (read_dir_paths(&paths, src->buf) < 0) |
| 267 | return -1; |
| 268 | paths.cmp = pack_copy_cmp; |
| 269 | string_list_sort(&paths); |
| 270 | |
| 271 | for (size_t i = 0; i < paths.nr; i++) { |
| 272 | const char *name = paths.items[i].string; |
| 273 | enum finalize_object_file_flags flags_copy = flags; |
| 274 | |
| 275 | strbuf_addf(src, "/%s", name); |
| 276 | strbuf_addf(dst, "/%s", name); |
| 277 | |
| 278 | if (is_loose_object_shard(name)) |
| 279 | flags_copy |= FOF_SKIP_COLLISION_CHECK; |
| 280 | |
| 281 | ret |= migrate_one(t, src, dst, flags_copy); |
| 282 | |
| 283 | strbuf_setlen(src, src_len); |
| 284 | strbuf_setlen(dst, dst_len); |
| 285 | } |
| 286 | |
| 287 | string_list_clear(&paths, 0); |
| 288 | return ret; |
| 289 | } |
| 290 | |
| 291 | int tmp_objdir_migrate(struct tmp_objdir *t) |
| 292 | { |
no test coverage detected