jcs
/amend
/amendments
/108
repo: Provide some detailed progress while opening repos
This can take a while, so entertain the user while we work.
jcs made amendment 108 over 2 years ago
--- repo.c Thu Nov 10 09:26:24 2022
+++ repo.c Thu Nov 10 10:33:06 2022
@@ -25,7 +25,7 @@
#include "strnatcmp.h"
#include "util.h"
-struct repo * repo_init(struct bile *bile, short is_new);
+struct repo * repo_init(struct bile *bile, bool is_new);
void repo_sort_files(struct repo *repo);
void repo_sort_amendments(struct repo *repo);
short repo_get_file_attrs(struct repo *repo, Str255 filename,
@@ -33,7 +33,7 @@ short repo_get_file_attrs(struct repo *repo, Str255 fi
short repo_file_update(struct repo *repo, struct repo_file *file);
unsigned short repo_diff_header(struct repo *repo,
struct repo_amendment *amendment, char **ret);
-short repo_migrate(struct repo *repo, short is_new);
+short repo_migrate(struct repo *repo, bool is_new);
pascal Boolean repo_add_file_filter(struct FileParam *pbp);
struct repo *
@@ -66,10 +66,6 @@ repo_open(AppFile *file)
return NULL;
}
- progress("Verifying repository structure...");
- bile_verify(bile);
-
- progress("Reading repository...");
return repo_init(bile, 0);
}
@@ -95,11 +91,11 @@ repo_create(void)
if (bile == NULL)
panic("Failed to create %s: %d", PtoCstr(reply.fName), error);
- return repo_init(bile, 1);
+ return repo_init(bile, true);
}
struct repo *
-repo_init(struct bile *bile, short is_new)
+repo_init(struct bile *bile, bool is_new)
{
Str255 buf;
struct bile_object *bob;
@@ -108,7 +104,7 @@ repo_init(struct bile *bile, short is_new)
size_t size;
char *data;
short error, fh;
- unsigned long i;
+ unsigned short i;
repo = xmalloczero(sizeof(struct repo), "repo");
repo->bile = bile;
@@ -125,9 +121,11 @@ repo_init(struct bile *bile, short is_new)
if (repo->nfiles) {
repo->files = xcalloc(repo->nfiles, sizeof(Ptr), "repo files");
for (i = 0; i < repo->nfiles; i++) {
+ if (i == 0 || i == repo->nfiles - 1 || ((i + 1) % 10) == 0)
+ progress("Loading file %d/%d...", i + 1, repo->nfiles);
bob = bile_get_nth_of_type(bile, i, REPO_FILE_RTYPE);
if (bob == NULL)
- panic("no %ld file, but count said it should be there", i);
+ panic("no %d file, but count said it should be there", i);
size = bile_read_alloc(bile, REPO_FILE_RTYPE, bob->id, &data);
if (size == 0)
panic("failed fetching file %ld", bob->id);
@@ -148,9 +146,13 @@ repo_init(struct bile *bile, short is_new)
repo->amendments = xcalloc(repo->namendments, sizeof(Ptr),
"repo amendments");
for (i = 0; i < repo->namendments; i++) {
+ if (i == 0 || i == repo->namendments - 1 ||
+ ((i + 1) % 10) == 0)
+ progress("Loading amendment %d/%d...", i + 1,
+ repo->namendments);
bob = bile_get_nth_of_type(bile, i, REPO_AMENDMENT_RTYPE);
if (bob == NULL)
- panic("no %ld amendment, but count said it should be there",
+ panic("no %d amendment, but count said it should be there",
i);
size = bile_read_alloc(bile, REPO_AMENDMENT_RTYPE, bob->id,
&data);
@@ -162,8 +164,9 @@ repo_init(struct bile *bile, short is_new)
repo->next_amendment_id = repo->amendments[i]->id + 1;
xfree(&data);
}
+
+ repo_sort_amendments(repo);
}
- repo_sort_amendments(repo);
return repo;
}
@@ -1125,7 +1128,7 @@ repo_marshall_amendment(struct repo_amendment *amendme
}
short
-repo_migrate(struct repo *repo, short is_new)
+repo_migrate(struct repo *repo, bool is_new)
{
struct bile_object *bob;
Str255 tname;