commit - 0d23c640a51b599b99c9fe781c54e1bd371bc433
commit + df608fc203b5a43669fc6d8f886c4ab4a518b6b6
blob - cdaeef909c106875bbbf659a52c64f0eac22d6d1
blob + 89a96527bdeb14c7ad3997dff379e3f0cb4379a1
--- gotadmin/gotadmin.c
+++ gotadmin/gotadmin.c
int ch, dry_run = 0, verbosity = 0;
int ncommits = 0, nloose = 0, npacked = 0;
int remove_lonely_packidx = 0, ignore_mtime = 0;
- struct got_lockfile *lock = NULL;
struct got_cleanup_progress_arg cpa;
struct got_lonely_packidx_progress_arg lpa;
off_t loose_before, loose_after;
"this implies that objects must not be deleted");
goto done;
}
-
- error = got_repo_cleanup_prepare(repo, &lock);
- if (error)
- goto done;
if (remove_lonely_packidx) {
memset(&lpa, 0, sizeof(lpa));
cpa.dry_run = dry_run;
cpa.verbosity = verbosity;
- error = got_repo_purge_unreferenced_loose_objects(repo,
- &loose_before, &loose_after, &ncommits, &nloose, &npacked,
- dry_run, ignore_mtime, cleanup_progress, &cpa,
- check_cancelled, NULL);
- if (error) {
- if (cpa.printed_something)
- printf("\n");
- goto done;
- }
-
- error = got_repo_purge_redundant_packfiles(repo, &pack_before,
- &pack_after, dry_run, ncommits, nloose, npacked,
+ error = got_repo_cleanup(repo, &loose_before, &loose_after,
+ &pack_before, &pack_after, &npacked, dry_run, ignore_mtime,
cleanup_progress, &cpa, check_cancelled, NULL);
if (cpa.printed_something)
printf("\n");
}
done:
- got_repo_cleanup_complete(repo, lock);
if (repo)
got_repo_close(repo);
if (pack_fds) {
blob - ea8cf37270d81a00cc006814c1e95430045f8277
blob + 5c8a41b06b8735767c2fb5b22ea03d83779a6495
--- include/got_repository_admin.h
+++ include/got_repository_admin.h
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-struct got_lockfile;
-
/* A callback function which gets invoked with progress information to print. */
typedef const struct got_error *(*got_pack_progress_cb)(void *arg,
int ncolored, int nfound, int ntrees, off_t packfile_size, int ncommits,
struct got_repository *repo, got_pack_list_cb list_cb, void *list_arg,
got_cancel_cb cancel_cb, void *cancel_arg);
-/*
- * Prepare for removing loose objects or redundant packfiles.
- *
- * These functions do the necessary locking in order to avoid
- * concurrent operation to irremediably damage the repository.
- */
-const struct got_error *
-got_repo_cleanup_prepare(struct got_repository *, struct got_lockfile **);
-
-const struct got_error *
-got_repo_cleanup_complete(struct got_repository *, struct got_lockfile *);
-
/* A callback function which gets invoked with cleanup information to print. */
typedef const struct got_error *(*got_cleanup_progress_cb)(void *arg,
int nloose, int ncommits, int npurged, int nredundant);
* implementation-defined timestamp threshold, unless ignore_mtime is set.
* Return the disk space size occupied by loose objects before and after
* the operation.
+ * Remove pack file which are redundant because all their objects are
+ * unreachable or already provided by other packs.
* Return the number of loose objects which are also stored in a pack file.
*/
const struct got_error *
-got_repo_purge_unreferenced_loose_objects(struct got_repository *repo,
- off_t *size_before, off_t *size_after, int *ncommits, int *nloose,
- int *npacked, int dry_run, int ignore_mtime,
+got_repo_cleanup(struct got_repository *repo, off_t *loose_before,
+ off_t *loose_after, off_t *pack_before, off_t *pack_after,
+ int dry_run, int ignore_mtime,
got_cleanup_progress_cb progress_cb, void *progress_arg,
got_cancel_cb cancel_cb, void *cancel_arg);
-const struct got_error *
-got_repo_purge_redundant_packfiles(struct got_repository *repo,
- off_t *before, off_t *size_after, int dry_run,
- int nloose, int ncommits, int npurged,
- got_cleanup_progress_cb progress_cb, void *progress_arg,
- got_cancel_cb cancel_cb, void *cancel_arg);
-
/* A callback function which gets invoked with cleanup information to print. */
typedef const struct got_error *(*got_lonely_packidx_progress_cb)(void *arg,
const char *path);
blob - 19d5908c4cf536ad152ec319e3493ffdd5a1183d
blob + 064041ebe0672364e61cfda87818e3da74455499
--- lib/repository_admin.c
+++ lib/repository_admin.c
return err;
}
-const struct got_error *
-got_repo_cleanup_prepare(struct got_repository *repo,
- struct got_lockfile **lk)
+static const struct got_error *
+cleanup_lock(struct got_repository *repo, struct got_lockfile **lk)
{
const struct got_error *err;
char myname[_POSIX_HOST_NAME_MAX + 1];
}
const struct got_error *
-got_repo_cleanup_complete(struct got_repository *repo,
- struct got_lockfile *lk)
+cleanup_unlock(struct got_repository *repo, struct got_lockfile *lk)
{
if (lk == NULL)
return NULL;
}
const struct got_error *
-got_repo_purge_unreferenced_loose_objects(struct got_repository *repo,
- off_t *size_before, off_t *size_after, int *ncommits, int *nloose,
+got_repo_cleanup(struct got_repository *repo,
+ off_t *loose_before, off_t *loose_after,
+ off_t *pack_before, off_t *pack_after,
+ int *ncommits, int *nloose,
int *npacked, int dry_run, int ignore_mtime,
got_cleanup_progress_cb progress_cb, void *progress_arg,
got_cancel_cb cancel_cb, void *cancel_arg)
TAILQ_INIT(&refs);
got_ratelimit_init(&rl, 0, 500);
- *size_before = 0;
- *size_after = 0;
+ *loose_before = 0;
+ *loose_after = 0;
*npacked = 0;
- err = get_loose_object_ids(&loose_ids, size_before,
+ err = get_loose_object_ids(&loose_ids, loose_before,
progress_cb, progress_arg, &rl, repo);
if (err)
return err;
err = got_object_idset_for_each(loose_ids, purge_loose_object, &arg);
if (err)
goto done;
- *size_after = *size_before - arg.size_purged;
+ *loose_after = *loose_before - arg.size_purged;
/* Produce a final progress report. */
if (progress_cb) {