istagit-gopher: add -l option: limit the amount of commits for the log.gph file - stagit-gemini - Stagit for gemini protocol Openbsd Err thinkerwim.openbsd.amsterdam 70 hgit clone git://thinkerwim.org/stagit-gemini.git URL:git://thinkerwim.org/stagit-gemini.git thinkerwim.org 70 1Log /git/stagit-gemini/log.gph thinkerwim.org 70 1Files /git/stagit-gemini/files.gph thinkerwim.org 70 1Refs /git/stagit-gemini/refs.gph thinkerwim.org 70 1README /git/stagit-gemini/file/README.gph thinkerwim.org 70 1LICENSE /git/stagit-gemini/file/LICENSE.gph thinkerwim.org 70 i--- Err thinkerwim.openbsd.amsterdam 70 1commit b5cdcadb391b8f27bced0273013ae5ba2189cde9 /git/stagit-gemini/commit/b5cdcadb391b8f27bced0273013ae5ba2189cde9.gph thinkerwim.org 70 1parent fa9a155a4a631fe2f384e9f7516a9a03f2f53c70 /git/stagit-gemini/commit/fa9a155a4a631fe2f384e9f7516a9a03f2f53c70.gph thinkerwim.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org thinkerwim.org 70 iDate: Sun, 21 Jan 2018 16:47:48 +0100 Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 istagit-gopher: add -l option: limit the amount of commits for the log.gph file Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 iDiffstat: Err thinkerwim.openbsd.amsterdam 70 i M stagit-gopher.1 | 14 +++++++++++++- Err thinkerwim.openbsd.amsterdam 70 i M stagit-gopher.c | 46 ++++++++++++++++++++++++------- Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i2 files changed, 49 insertions(+), 11 deletions(-) Err thinkerwim.openbsd.amsterdam 70 i--- Err thinkerwim.openbsd.amsterdam 70 1diff --git a/stagit-gopher.1 b/stagit-gopher.1 /git/stagit-gemini/file/stagit-gopher.1.gph thinkerwim.org 70 i@@ -1,4 +1,4 @@ Err thinkerwim.openbsd.amsterdam 70 i-.Dd Jun 23, 2017 Err thinkerwim.openbsd.amsterdam 70 i+.Dd Januari 21, 2018 Err thinkerwim.openbsd.amsterdam 70 i .Dt STAGIT-GOPHER 1 Err thinkerwim.openbsd.amsterdam 70 i .Os Err thinkerwim.openbsd.amsterdam 70 i .Sh NAME Err thinkerwim.openbsd.amsterdam 70 i@@ -8,6 +8,7 @@ Err thinkerwim.openbsd.amsterdam 70 i .Nm Err thinkerwim.openbsd.amsterdam 70 i .Op Fl b Ar baseprefix Err thinkerwim.openbsd.amsterdam 70 i .Op Fl c Ar cachefile Err thinkerwim.openbsd.amsterdam 70 i+.Op Fl l Ar commits Err thinkerwim.openbsd.amsterdam 70 i .Ar repodir Err thinkerwim.openbsd.amsterdam 70 i .Sh DESCRIPTION Err thinkerwim.openbsd.amsterdam 70 i .Nm Err thinkerwim.openbsd.amsterdam 70 i@@ -29,8 +30,19 @@ will store the last commit id and the entries in the Gopher index. Err thinkerwim.openbsd.amsterdam 70 i It is up to the user to make sure the state of the Err thinkerwim.openbsd.amsterdam 70 i .Ar cachefile Err thinkerwim.openbsd.amsterdam 70 i is in sync with the history of the repository. Err thinkerwim.openbsd.amsterdam 70 i+.It Fl l Ar commits Err thinkerwim.openbsd.amsterdam 70 i+Write a maximum number of Err thinkerwim.openbsd.amsterdam 70 i+.Ar commits Err thinkerwim.openbsd.amsterdam 70 i+to the log.gph file only. Err thinkerwim.openbsd.amsterdam 70 i+However the commit files are written as usual. Err thinkerwim.openbsd.amsterdam 70 i .El Err thinkerwim.openbsd.amsterdam 70 i .Pp Err thinkerwim.openbsd.amsterdam 70 i+The options Err thinkerwim.openbsd.amsterdam 70 i+.Fl c Err thinkerwim.openbsd.amsterdam 70 i+and Err thinkerwim.openbsd.amsterdam 70 i+.Fl l Err thinkerwim.openbsd.amsterdam 70 i+cannot be used at the same time. Err thinkerwim.openbsd.amsterdam 70 i+.Pp Err thinkerwim.openbsd.amsterdam 70 i The following files will be written: Err thinkerwim.openbsd.amsterdam 70 i .Bl -tag -width Ds Err thinkerwim.openbsd.amsterdam 70 i .It atom.xml Err thinkerwim.openbsd.amsterdam 70 1diff --git a/stagit-gopher.c b/stagit-gopher.c /git/stagit-gemini/file/stagit-gopher.c.gph thinkerwim.org 70 i@@ -59,6 +59,7 @@ static char *strippedname = ""; Err thinkerwim.openbsd.amsterdam 70 i static char description[255]; Err thinkerwim.openbsd.amsterdam 70 i static char cloneurl[1024]; Err thinkerwim.openbsd.amsterdam 70 i static int haslicense, hasreadme, hassubmodules; Err thinkerwim.openbsd.amsterdam 70 i+static long long nlogcommits = -1; /* < 0 indicates not used */ Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i /* cache */ Err thinkerwim.openbsd.amsterdam 70 i static git_oid lastoid; Err thinkerwim.openbsd.amsterdam 70 i@@ -661,7 +662,7 @@ writelog(FILE *fp, const git_oid *oid) Err thinkerwim.openbsd.amsterdam 70 i struct commitinfo *ci; Err thinkerwim.openbsd.amsterdam 70 i git_revwalk *w = NULL; Err thinkerwim.openbsd.amsterdam 70 i git_oid id; Err thinkerwim.openbsd.amsterdam 70 i- char path[PATH_MAX]; Err thinkerwim.openbsd.amsterdam 70 i+ char path[PATH_MAX], oidstr[GIT_OID_HEXSZ + 1]; Err thinkerwim.openbsd.amsterdam 70 i FILE *fpfile; Err thinkerwim.openbsd.amsterdam 70 i int r; Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i@@ -673,20 +674,34 @@ writelog(FILE *fp, const git_oid *oid) Err thinkerwim.openbsd.amsterdam 70 i while (!git_revwalk_next(&id, w)) { Err thinkerwim.openbsd.amsterdam 70 i if (cachefile && !memcmp(&id, &lastoid, sizeof(id))) Err thinkerwim.openbsd.amsterdam 70 i break; Err thinkerwim.openbsd.amsterdam 70 i+ Err thinkerwim.openbsd.amsterdam 70 i+ git_oid_tostr(oidstr, sizeof(oidstr), &id); Err thinkerwim.openbsd.amsterdam 70 i+ r = snprintf(path, sizeof(path), "commit/%s.gph", oidstr); Err thinkerwim.openbsd.amsterdam 70 i+ if (r == -1 || (size_t)r >= sizeof(path)) Err thinkerwim.openbsd.amsterdam 70 i+ errx(1, "path truncated: 'commit/%s.gph'", oidstr); Err thinkerwim.openbsd.amsterdam 70 i+ r = access(path, F_OK); Err thinkerwim.openbsd.amsterdam 70 i+ Err thinkerwim.openbsd.amsterdam 70 i+ /* optimization: if there are no log lines to write and Err thinkerwim.openbsd.amsterdam 70 i+ the commit file already exists: skip the diffstat */ Err thinkerwim.openbsd.amsterdam 70 i+ if (!nlogcommits && !r) Err thinkerwim.openbsd.amsterdam 70 i+ continue; Err thinkerwim.openbsd.amsterdam 70 i+ Err thinkerwim.openbsd.amsterdam 70 i if (!(ci = commitinfo_getbyoid(&id))) Err thinkerwim.openbsd.amsterdam 70 i break; Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i- writelogline(fp, ci); Err thinkerwim.openbsd.amsterdam 70 i+ if (nlogcommits < 0) { Err thinkerwim.openbsd.amsterdam 70 i+ writelogline(fp, ci); Err thinkerwim.openbsd.amsterdam 70 i+ } else if (nlogcommits > 0) { Err thinkerwim.openbsd.amsterdam 70 i+ writelogline(fp, ci); Err thinkerwim.openbsd.amsterdam 70 i+ nlogcommits--; Err thinkerwim.openbsd.amsterdam 70 i+ } Err thinkerwim.openbsd.amsterdam 70 i+ Err thinkerwim.openbsd.amsterdam 70 i if (cachefile) Err thinkerwim.openbsd.amsterdam 70 i writelogline(wcachefp, ci); Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i- r = snprintf(path, sizeof(path), "commit/%s.gph", ci->oid); Err thinkerwim.openbsd.amsterdam 70 i- if (r == -1 || (size_t)r >= sizeof(path)) Err thinkerwim.openbsd.amsterdam 70 i- errx(1, "path truncated: 'commit/%s.gph'", ci->oid); Err thinkerwim.openbsd.amsterdam 70 i- Err thinkerwim.openbsd.amsterdam 70 i /* check if file exists if so skip it */ Err thinkerwim.openbsd.amsterdam 70 i- if (access(path, F_OK)) { Err thinkerwim.openbsd.amsterdam 70 i- /* lookup stats: only required here */ Err thinkerwim.openbsd.amsterdam 70 i+ if (r) { Err thinkerwim.openbsd.amsterdam 70 i+ /* lookup stats: only required here for gopher */ Err thinkerwim.openbsd.amsterdam 70 i if (commitinfo_getstats(ci) == -1) Err thinkerwim.openbsd.amsterdam 70 i goto err; Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i@@ -1073,7 +1088,7 @@ err: Err thinkerwim.openbsd.amsterdam 70 i void Err thinkerwim.openbsd.amsterdam 70 i usage(char *argv0) Err thinkerwim.openbsd.amsterdam 70 i { Err thinkerwim.openbsd.amsterdam 70 i- fprintf(stderr, "%s [-b baseprefix] [-c cachefile] repodir\n", argv0); Err thinkerwim.openbsd.amsterdam 70 i+ fprintf(stderr, "%s [-b baseprefix] [-c cachefile] [-l commits] repodir\n", argv0); Err thinkerwim.openbsd.amsterdam 70 i exit(1); Err thinkerwim.openbsd.amsterdam 70 i } Err thinkerwim.openbsd.amsterdam 70 i Err thinkerwim.openbsd.amsterdam 70 i@@ -1105,9 +1120,20 @@ main(int argc, char *argv[]) Err thinkerwim.openbsd.amsterdam 70 i usage(argv[0]); Err thinkerwim.openbsd.amsterdam 70 i relpath = argv[++i]; Err thinkerwim.openbsd.amsterdam 70 i } else if (argv[i][1] == 'c') { Err thinkerwim.openbsd.amsterdam 70 i- if (i + 1 >= argc) Err thinkerwim.openbsd.amsterdam 70 i+ if (nlogcommits > 0 || i + 1 >= argc) Err thinkerwim.openbsd.amsterdam 70 i usage(argv[0]); Err thinkerwim.openbsd.amsterdam 70 i cachefile = argv[++i]; Err thinkerwim.openbsd.amsterdam 70 i+ } else if (argv[i][1] == 'l') { Err thinkerwim.openbsd.amsterdam 70 i+ if (cachefile || i + 1 >= argc) Err thinkerwim.openbsd.amsterdam 70 i+ usage(argv[0]); Err thinkerwim.openbsd.amsterdam 70 i+ errno = 0; Err thinkerwim.openbsd.amsterdam 70 i+ nlogcommits = strtoll(argv[++i], &p, 10); Err thinkerwim.openbsd.amsterdam 70 i+ if (argv[i][0] == '\0' || *p != '\0' || Err thinkerwim.openbsd.amsterdam 70 i+ nlogcommits <= 0) Err thinkerwim.openbsd.amsterdam 70 i+ usage(argv[0]); Err thinkerwim.openbsd.amsterdam 70 i+ if (errno == ERANGE && (nlogcommits == LLONG_MAX || Err thinkerwim.openbsd.amsterdam 70 i+ nlogcommits == LLONG_MIN)) Err thinkerwim.openbsd.amsterdam 70 i+ usage(argv[0]); Err thinkerwim.openbsd.amsterdam 70 i } Err thinkerwim.openbsd.amsterdam 70 i } Err thinkerwim.openbsd.amsterdam 70 i if (!cachefile && pledge("stdio rpath wpath cpath", NULL) == -1) Err thinkerwim.openbsd.amsterdam 70 .