Skip to content

Commit f053ab6

Browse files
ttaylorrgitster
authored andcommitted
repack: remove 'generated_pack' API from the builtin
Now that we have factored the "generated_pack" API, we can move it to repack.ch, further slimming down builtin/repack.c. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 7036d13 commit f053ab6

3 files changed

Lines changed: 91 additions & 83 deletions

File tree

builtin/repack.c

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -134,89 +134,6 @@ static int write_oid(const struct object_id *oid,
134134
return 0;
135135
}
136136

137-
static struct {
138-
const char *name;
139-
unsigned optional:1;
140-
} exts[] = {
141-
{".pack"},
142-
{".rev", 1},
143-
{".mtimes", 1},
144-
{".bitmap", 1},
145-
{".promisor", 1},
146-
{".idx"},
147-
};
148-
149-
struct generated_pack {
150-
struct tempfile *tempfiles[ARRAY_SIZE(exts)];
151-
};
152-
153-
static struct generated_pack *generated_pack_populate(const char *name,
154-
const char *packtmp)
155-
{
156-
struct stat statbuf;
157-
struct strbuf path = STRBUF_INIT;
158-
struct generated_pack *pack = xcalloc(1, sizeof(*pack));
159-
int i;
160-
161-
for (i = 0; i < ARRAY_SIZE(exts); i++) {
162-
strbuf_reset(&path);
163-
strbuf_addf(&path, "%s-%s%s", packtmp, name, exts[i].name);
164-
165-
if (stat(path.buf, &statbuf))
166-
continue;
167-
168-
pack->tempfiles[i] = register_tempfile(path.buf);
169-
}
170-
171-
strbuf_release(&path);
172-
return pack;
173-
}
174-
175-
static int generated_pack_has_ext(const struct generated_pack *pack,
176-
const char *ext)
177-
{
178-
int i;
179-
for (i = 0; i < ARRAY_SIZE(exts); i++) {
180-
if (strcmp(exts[i].name, ext))
181-
continue;
182-
return !!pack->tempfiles[i];
183-
}
184-
BUG("unknown pack extension: '%s'", ext);
185-
}
186-
187-
static void generated_pack_install(struct generated_pack *pack,
188-
const char *name,
189-
const char *packdir, const char *packtmp)
190-
{
191-
int ext;
192-
for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
193-
char *fname;
194-
195-
fname = mkpathdup("%s/pack-%s%s", packdir, name,
196-
exts[ext].name);
197-
198-
if (pack->tempfiles[ext]) {
199-
const char *fname_old = get_tempfile_path(pack->tempfiles[ext]);
200-
struct stat statbuffer;
201-
202-
if (!stat(fname_old, &statbuffer)) {
203-
statbuffer.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
204-
chmod(fname_old, statbuffer.st_mode);
205-
}
206-
207-
if (rename_tempfile(&pack->tempfiles[ext], fname))
208-
die_errno(_("renaming pack to '%s' failed"),
209-
fname);
210-
} else if (!exts[ext].optional)
211-
die(_("pack-objects did not write a '%s' file for pack %s-%s"),
212-
exts[ext].name, packtmp, name);
213-
else if (unlink(fname) < 0 && errno != ENOENT)
214-
die_errno(_("could not unlink: %s"), fname);
215-
216-
free(fname);
217-
}
218-
}
219-
220137
static void repack_promisor_objects(struct repository *repo,
221138
const struct pack_objects_args *args,
222139
struct string_list *names)

repack.c

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
#include "midx.h"
44
#include "odb.h"
55
#include "packfile.h"
6+
#include "path.h"
67
#include "repack.h"
78
#include "repository.h"
89
#include "run-command.h"
10+
#include "tempfile.h"
911

1012
void prepare_pack_objects(struct child_process *cmd,
1113
const struct pack_objects_args *args,
@@ -219,3 +221,84 @@ void existing_packs_release(struct existing_packs *existing)
219221
string_list_clear(&existing->non_kept_packs, 0);
220222
string_list_clear(&existing->cruft_packs, 0);
221223
}
224+
225+
static struct {
226+
const char *name;
227+
unsigned optional:1;
228+
} exts[] = {
229+
{".pack"},
230+
{".rev", 1},
231+
{".mtimes", 1},
232+
{".bitmap", 1},
233+
{".promisor", 1},
234+
{".idx"},
235+
};
236+
237+
struct generated_pack {
238+
struct tempfile *tempfiles[ARRAY_SIZE(exts)];
239+
};
240+
241+
struct generated_pack *generated_pack_populate(const char *name,
242+
const char *packtmp)
243+
{
244+
struct stat statbuf;
245+
struct strbuf path = STRBUF_INIT;
246+
struct generated_pack *pack = xcalloc(1, sizeof(*pack));
247+
size_t i;
248+
249+
for (i = 0; i < ARRAY_SIZE(exts); i++) {
250+
strbuf_reset(&path);
251+
strbuf_addf(&path, "%s-%s%s", packtmp, name, exts[i].name);
252+
253+
if (stat(path.buf, &statbuf))
254+
continue;
255+
256+
pack->tempfiles[i] = register_tempfile(path.buf);
257+
}
258+
259+
strbuf_release(&path);
260+
return pack;
261+
}
262+
263+
int generated_pack_has_ext(const struct generated_pack *pack, const char *ext)
264+
{
265+
size_t i;
266+
for (i = 0; i < ARRAY_SIZE(exts); i++) {
267+
if (strcmp(exts[i].name, ext))
268+
continue;
269+
return !!pack->tempfiles[i];
270+
}
271+
BUG("unknown pack extension: '%s'", ext);
272+
}
273+
274+
void generated_pack_install(struct generated_pack *pack, const char *name,
275+
const char *packdir, const char *packtmp)
276+
{
277+
size_t ext;
278+
for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
279+
char *fname;
280+
281+
fname = mkpathdup("%s/pack-%s%s", packdir, name,
282+
exts[ext].name);
283+
284+
if (pack->tempfiles[ext]) {
285+
const char *fname_old = get_tempfile_path(pack->tempfiles[ext]);
286+
struct stat statbuffer;
287+
288+
if (!stat(fname_old, &statbuffer)) {
289+
statbuffer.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
290+
chmod(fname_old, statbuffer.st_mode);
291+
}
292+
293+
if (rename_tempfile(&pack->tempfiles[ext], fname))
294+
die_errno(_("renaming pack to '%s' failed"),
295+
fname);
296+
} else if (!exts[ext].optional)
297+
die(_("pack-objects did not write a '%s' file for pack %s-%s"),
298+
exts[ext].name, packtmp, name);
299+
else if (unlink(fname) < 0 && errno != ENOENT)
300+
die_errno(_("could not unlink: %s"), fname);
301+
302+
free(fname);
303+
}
304+
}

repack.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,12 @@ void existing_packs_remove_redundant(struct existing_packs *existing,
6666
const char *packdir);
6767
void existing_packs_release(struct existing_packs *existing);
6868

69+
struct generated_pack;
70+
71+
struct generated_pack *generated_pack_populate(const char *name,
72+
const char *packtmp);
73+
int generated_pack_has_ext(const struct generated_pack *pack, const char *ext);
74+
void generated_pack_install(struct generated_pack *pack, const char *name,
75+
const char *packdir, const char *packtmp);
76+
6977
#endif /* REPACK_H */

0 commit comments

Comments
 (0)