irename urmoms to stagit, improve documentation - stagit-gopher - A git gopher frontend. (mirror) Err bitreich.org 70 hgit clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ URL:git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ bitreich.org 70 1Log /scm/stagit-gopher/log.gph bitreich.org 70 1Files /scm/stagit-gopher/files.gph bitreich.org 70 1Refs /scm/stagit-gopher/refs.gph bitreich.org 70 1Tags /scm/stagit-gopher/tag bitreich.org 70 1README /scm/stagit-gopher/file/README.gph bitreich.org 70 1LICENSE /scm/stagit-gopher/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 81dd454368b40eabf62fede213626d45512150a2 /scm/stagit-gopher/commit/81dd454368b40eabf62fede213626d45512150a2.gph bitreich.org 70 1parent 8c58750b636edc4ee36aff62d7c126f99b803dbb /scm/stagit-gopher/commit/8c58750b636edc4ee36aff62d7c126f99b803dbb.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sat, 26 Dec 2015 21:05:55 +0100 Err bitreich.org 70 i Err bitreich.org 70 irename urmoms to stagit, improve documentation Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 26 +++++++++++++------------- Err bitreich.org 70 i M README | 2 +- Err bitreich.org 70 i M TODO | 8 -------- Err bitreich.org 70 i M example.sh | 4 ++-- Err bitreich.org 70 i A stagit-index.1 | 37 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i R urmoms-index.c -> stagit-index.c | 0 Err bitreich.org 70 i A stagit.1 | 59 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i D urmoms-index.1 | 27 --------------------------- Err bitreich.org 70 i D urmoms.1 | 47 ------------------------------- Err bitreich.org 70 i D urmoms.c | 852 ------------------------------- Err bitreich.org 70 i Err bitreich.org 70 i10 files changed, 112 insertions(+), 950 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/stagit-gopher/file/Makefile.gph bitreich.org 70 i@@ -1,19 +1,19 @@ Err bitreich.org 70 i include config.mk Err bitreich.org 70 i Err bitreich.org 70 i-NAME = urmoms Err bitreich.org 70 i+NAME = stagit Err bitreich.org 70 i VERSION = 0.1 Err bitreich.org 70 i SRC = \ Err bitreich.org 70 i- urmoms.c\ Err bitreich.org 70 i- urmoms-index.c Err bitreich.org 70 i+ stagit.c\ Err bitreich.org 70 i+ stagit-index.c Err bitreich.org 70 i COMPATSRC = \ Err bitreich.org 70 i strlcat.c\ Err bitreich.org 70 i strlcpy.c Err bitreich.org 70 i BIN = \ Err bitreich.org 70 i- urmoms\ Err bitreich.org 70 i- urmoms-index Err bitreich.org 70 i+ stagit\ Err bitreich.org 70 i+ stagit-index Err bitreich.org 70 i MAN1 = \ Err bitreich.org 70 i- urmoms.1\ Err bitreich.org 70 i- urmoms-index.1 Err bitreich.org 70 i+ stagit.1\ Err bitreich.org 70 i+ stagit-index.1 Err bitreich.org 70 i DOC = \ Err bitreich.org 70 i LICENSE\ Err bitreich.org 70 i README\ Err bitreich.org 70 i@@ -35,9 +35,9 @@ dist: $(BIN) Err bitreich.org 70 i logo.png style.css \ Err bitreich.org 70 i release/${VERSION}/ Err bitreich.org 70 i # make tarball Err bitreich.org 70 i- rm -f urmoms-${VERSION}.tar.gz Err bitreich.org 70 i+ rm -f stagit-${VERSION}.tar.gz Err bitreich.org 70 i (cd release/${VERSION}; \ Err bitreich.org 70 i- tar -czf ../../urmoms-${VERSION}.tar.gz .) Err bitreich.org 70 i+ tar -czf ../../stagit-${VERSION}.tar.gz .) Err bitreich.org 70 i Err bitreich.org 70 i ${OBJ}: config.h config.mk ${HDR} Err bitreich.org 70 i Err bitreich.org 70 i@@ -45,11 +45,11 @@ config.h: Err bitreich.org 70 i @echo creating $@ from config.def.h Err bitreich.org 70 i @cp config.def.h $@ Err bitreich.org 70 i Err bitreich.org 70 i-urmoms: urmoms.o ${COMPATOBJ} Err bitreich.org 70 i- ${CC} -o $@ urmoms.o ${COMPATOBJ} ${LDFLAGS} Err bitreich.org 70 i+stagit: stagit.o ${COMPATOBJ} Err bitreich.org 70 i+ ${CC} -o $@ stagit.o ${COMPATOBJ} ${LDFLAGS} Err bitreich.org 70 i Err bitreich.org 70 i-urmoms-index: urmoms-index.o ${COMPATOBJ} Err bitreich.org 70 i- ${CC} -o $@ urmoms-index.o ${COMPATOBJ} ${LDFLAGS} Err bitreich.org 70 i+stagit-index: stagit-index.o ${COMPATOBJ} Err bitreich.org 70 i+ ${CC} -o $@ stagit-index.o ${COMPATOBJ} ${LDFLAGS} Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i rm -f ${BIN} ${OBJ} Err bitreich.org 70 1diff --git a/README b/README /scm/stagit-gopher/file/README.gph bitreich.org 70 i@@ -4,7 +4,7 @@ Usage Err bitreich.org 70 i Err bitreich.org 70 i mkdir -p htmldir Err bitreich.org 70 i cd htmldir Err bitreich.org 70 i-urmoms path-to-repo Err bitreich.org 70 i+stagit path-to-repo Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i Install Err bitreich.org 70 1diff --git a/TODO b/TODO /scm/stagit-gopher/file/TODO.gph bitreich.org 70 i@@ -1,17 +1,9 @@ Err bitreich.org 70 i-marketing: Err bitreich.org 70 i-- rename project: stagit? Err bitreich.org 70 i- Err bitreich.org 70 i performance: Err bitreich.org 70 i - optimize git_diff_get_stats. Err bitreich.org 70 i - speed up generating files. Err bitreich.org 70 i-- be smarter about changes (an existing commit can never change the diff page). Err bitreich.org 70 i Err bitreich.org 70 i layout: Err bitreich.org 70 i - make top menu look nicer in links/lynx again. Err bitreich.org 70 i Err bitreich.org 70 i documentation: Err bitreich.org 70 i - improve mandoc pages. Err bitreich.org 70 i- - document .git/description, .git/owner and .git/url Err bitreich.org 70 i- Err bitreich.org 70 i-idea: Err bitreich.org 70 i-- program to write index for multiple repos: urmoms-index ... Err bitreich.org 70 1diff --git a/example.sh b/example.sh /scm/stagit-gopher/file/example.sh.gph bitreich.org 70 i@@ -19,7 +19,7 @@ curdir=$(pwd) Err bitreich.org 70 i Err bitreich.org 70 i # make index. Err bitreich.org 70 i cd "${reposdir}" Err bitreich.org 70 i-find . -maxdepth 1 -type d | grep -v "^.$" | sort | xargs urmoms-index > "${curdir}/index.html" Err bitreich.org 70 i+find . -maxdepth 1 -type d | grep -v "^.$" | sort | xargs stagit-index > "${curdir}/index.html" Err bitreich.org 70 i Err bitreich.org 70 i # make files per repo. Err bitreich.org 70 i find . -maxdepth 1 -type d | grep -v "^.$" | sort | while read -r dir; do Err bitreich.org 70 i@@ -31,7 +31,7 @@ find . -maxdepth 1 -type d | grep -v "^.$" | sort | while read -r dir; do Err bitreich.org 70 i Err bitreich.org 70 i test -d "${d}" || mkdir -p "${d}" Err bitreich.org 70 i cd "${d}" Err bitreich.org 70 i- urmoms "${reposdir}${d}" Err bitreich.org 70 i+ stagit "${reposdir}${d}" Err bitreich.org 70 i Err bitreich.org 70 i printf " done\n" Err bitreich.org 70 i done Err bitreich.org 70 1diff --git a/stagit-index.1 b/stagit-index.1 /scm/stagit-gopher/file/stagit-index.1.gph bitreich.org 70 i@@ -0,0 +1,37 @@ Err bitreich.org 70 i+.Dd December 26, 2015 Err bitreich.org 70 i+.Dt STAGIT-INDEX 1 Err bitreich.org 70 i+.Os Err bitreich.org 70 i+.Sh NAME Err bitreich.org 70 i+.Nm stagit-index Err bitreich.org 70 i+.Nd static git index page generator Err bitreich.org 70 i+.Sh SYNOPSIS Err bitreich.org 70 i+.Nm Err bitreich.org 70 i+.Op Ar repodir... Err bitreich.org 70 i+.Sh DESCRIPTION Err bitreich.org 70 i+.Nm Err bitreich.org 70 i+will create an index HTML page for the repositories specified and writes Err bitreich.org 70 i+the HTML data to stdout. Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+The basename of the directory is used as the name. Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+The content of the follow files specifies the meta data for each repository: Err bitreich.org 70 i+.Bl -tag -width Ds Err bitreich.org 70 i+.It .git/description or description (bare repos). Err bitreich.org 70 i+description Err bitreich.org 70 i+.It .git/owner or owner (bare repo). Err bitreich.org 70 i+owner of repository Err bitreich.org 70 i+.El Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+For changing the style of the page you can use the following files: Err bitreich.org 70 i+.Bl -tag -width Ds Err bitreich.org 70 i+.It logo.png Err bitreich.org 70 i+32x32 logo. Err bitreich.org 70 i+.It favicon.png Err bitreich.org 70 i+favicon image. Err bitreich.org 70 i+.It style.css Err bitreich.org 70 i+CSS stylesheet. Err bitreich.org 70 i+.El Err bitreich.org 70 i+.Sh SEE ALSO Err bitreich.org 70 i+.Xr stagit 1 Err bitreich.org 70 i+.Sh AUTHORS Err bitreich.org 70 i+.An Hiltjo Posthuma Aq Mt hiltjo@codemadness.org Err bitreich.org 70 1diff --git a/urmoms-index.c b/stagit-index.c /scm/stagit-gopher/file/stagit-index.c.gph bitreich.org 70 1diff --git a/stagit.1 b/stagit.1 /scm/stagit-gopher/file/stagit.1.gph bitreich.org 70 i@@ -0,0 +1,59 @@ Err bitreich.org 70 i+.Dd December 26, 2015 Err bitreich.org 70 i+.Dt STAGIT 1 Err bitreich.org 70 i+.Os Err bitreich.org 70 i+.Sh NAME Err bitreich.org 70 i+.Nm stagit Err bitreich.org 70 i+.Nd static git page generator Err bitreich.org 70 i+.Sh SYNOPSIS Err bitreich.org 70 i+.Nm Err bitreich.org 70 i+.Op Ar repodir Err bitreich.org 70 i+.Sh DESCRIPTION Err bitreich.org 70 i+.Nm Err bitreich.org 70 i+writes HTML pages for the repository Err bitreich.org 70 i+.Ar repodir Err bitreich.org 70 i+to the current directory. The following files will be written: Err bitreich.org 70 i+.Bl -tag -width Ds Err bitreich.org 70 i+.It atom.xml Err bitreich.org 70 i+Atom XML feed Err bitreich.org 70 i+.It files.html Err bitreich.org 70 i+List of files in the latest HEAD commit, linking to the file. Err bitreich.org 70 i+.It log.html Err bitreich.org 70 i+List of commits in order of most recent to old of the commits (top to bottom), Err bitreich.org 70 i+each commit links to a page with a diff and diffstat of the commit. Err bitreich.org 70 i+.El Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+For each file in HEAD a file will be written in the format: Err bitreich.org 70 i+file/filepath.html. This file will contain the textual data of the file Err bitreich.org 70 i+prefixed by line numbers. The file will have the string "binary file" Err bitreich.org 70 i+if the data is considered to be non-textual. Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+For each commit a file will be written in the format: Err bitreich.org 70 i+commit/commitid.html . This file will contain the diff and diffstat of the Err bitreich.org 70 i+commit. It will write the string "binary files differ" if the data is Err bitreich.org 70 i+considered to be non-textual. Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+The basename of the directory is used as the name. Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+The content of the follow files specifies the meta data for each repository: Err bitreich.org 70 i+.Bl -tag -width Ds Err bitreich.org 70 i+.It .git/description or description (bare repos). Err bitreich.org 70 i+description Err bitreich.org 70 i+.It .git/owner or owner (bare repo). Err bitreich.org 70 i+owner of repository Err bitreich.org 70 i+.It .git/url or url (bare repo). Err bitreich.org 70 i+primary clone url of the repository, for example: git://git.2f30.org/stagit Err bitreich.org 70 i+.El Err bitreich.org 70 i+.Pp Err bitreich.org 70 i+For changing the style of the page you can use the following files: Err bitreich.org 70 i+.Bl -tag -width Ds Err bitreich.org 70 i+.It logo.png Err bitreich.org 70 i+32x32 logo. Err bitreich.org 70 i+.It favicon.png Err bitreich.org 70 i+favicon image. Err bitreich.org 70 i+.It style.css Err bitreich.org 70 i+CSS stylesheet. Err bitreich.org 70 i+.El Err bitreich.org 70 i+.Sh SEE ALSO Err bitreich.org 70 i+.Xr stagit-index 1 Err bitreich.org 70 i+.Sh AUTHORS Err bitreich.org 70 i+.An Hiltjo Posthuma Aq Mt hiltjo@codemadness.org Err bitreich.org 70 1diff --git a/urmoms-index.1 b/urmoms-index.1 /scm/stagit-gopher/file/urmoms-index.1.gph bitreich.org 70 i@@ -1,27 +0,0 @@ Err bitreich.org 70 i-.Dd December 20, 2015 Err bitreich.org 70 i-.Dt URMOMS-INDEX 1 Err bitreich.org 70 i-.Os Err bitreich.org 70 i-.Sh NAME Err bitreich.org 70 i-.Nm urmoms-index Err bitreich.org 70 i-.Nd static git index page generator Err bitreich.org 70 i-.Sh SYNOPSIS Err bitreich.org 70 i-.Nm Err bitreich.org 70 i-.Op Ar repodir... Err bitreich.org 70 i-.Sh DESCRIPTION Err bitreich.org 70 i-.Nm Err bitreich.org 70 i-will create an index HTML page for the repositories specified and writes Err bitreich.org 70 i-the HTML data to stdout. Err bitreich.org 70 i-.Pp Err bitreich.org 70 i-For changing the style of the page you can use the following files: Err bitreich.org 70 i-.Bl -tag -width Ds Err bitreich.org 70 i-.It logo.png Err bitreich.org 70 i-32x32 logo. Err bitreich.org 70 i-.It favicon.png Err bitreich.org 70 i-favicon image. Err bitreich.org 70 i-.It style.css Err bitreich.org 70 i-CSS stylesheet. Err bitreich.org 70 i-.El Err bitreich.org 70 i-.Sh SEE ALSO Err bitreich.org 70 i-.Xr urmoms 1 Err bitreich.org 70 i-.Sh AUTHORS Err bitreich.org 70 i-.An Hiltjo Posthuma Aq Mt hiltjo@codemadness.org Err bitreich.org 70 1diff --git a/urmoms.1 b/urmoms.1 /scm/stagit-gopher/file/urmoms.1.gph bitreich.org 70 i@@ -1,47 +0,0 @@ Err bitreich.org 70 i-.Dd December 20, 2015 Err bitreich.org 70 i-.Dt URMOMS 1 Err bitreich.org 70 i-.Os Err bitreich.org 70 i-.Sh NAME Err bitreich.org 70 i-.Nm urmoms Err bitreich.org 70 i-.Nd static git page generator Err bitreich.org 70 i-.Sh SYNOPSIS Err bitreich.org 70 i-.Nm Err bitreich.org 70 i-.Op Ar repodir Err bitreich.org 70 i-.Sh DESCRIPTION Err bitreich.org 70 i-.Nm Err bitreich.org 70 i-writes HTML pages for the repository Err bitreich.org 70 i-.Ar repodir Err bitreich.org 70 i-to the current directory. The following files will be written: Err bitreich.org 70 i-.Bl -tag -width Ds Err bitreich.org 70 i-.It atom.xml Err bitreich.org 70 i-Atom XML feed Err bitreich.org 70 i-.It files.html Err bitreich.org 70 i-List of files in the latest HEAD commit, linking to the file. Err bitreich.org 70 i-.It log.html Err bitreich.org 70 i-List of commits in order of most recent to old of the commits (top to bottom), Err bitreich.org 70 i-each commit links to a page with a diff and diffstat of the commit. Err bitreich.org 70 i-.El Err bitreich.org 70 i-.Pp Err bitreich.org 70 i-For each file in HEAD a file will be written in the format: Err bitreich.org 70 i-file/filepath.html. This file will contain the textual data of the file Err bitreich.org 70 i-prefixed by line numbers. The file will have the string "binary file" Err bitreich.org 70 i-if the data is considered to be non-textual. Err bitreich.org 70 i-.Pp Err bitreich.org 70 i-For each commit a file will be written in the format: Err bitreich.org 70 i-commit/commitid.html . This file will contain the diff and diffstat of the Err bitreich.org 70 i-commit. It will write the string "binary files differ" if the data is Err bitreich.org 70 i-considered to be non-textual. Err bitreich.org 70 i-.Pp Err bitreich.org 70 i-For changing the style of the page you can use the following files: Err bitreich.org 70 i-.Bl -tag -width Ds Err bitreich.org 70 i-.It logo.png Err bitreich.org 70 i-32x32 logo. Err bitreich.org 70 i-.It favicon.png Err bitreich.org 70 i-favicon image. Err bitreich.org 70 i-.It style.css Err bitreich.org 70 i-CSS stylesheet. Err bitreich.org 70 i-.El Err bitreich.org 70 i-.Sh SEE ALSO Err bitreich.org 70 i-.Xr urmoms-index 1 Err bitreich.org 70 i-.Sh AUTHORS Err bitreich.org 70 i-.An Hiltjo Posthuma Aq Mt hiltjo@codemadness.org Err bitreich.org 70 1diff --git a/urmoms.c b/urmoms.c /scm/stagit-gopher/file/urmoms.c.gph bitreich.org 70 i@@ -1,852 +0,0 @@ Err bitreich.org 70 i-#include Err bitreich.org 70 i- Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i- Err bitreich.org 70 i-#include Err bitreich.org 70 i- Err bitreich.org 70 i-#include "compat.h" Err bitreich.org 70 i-#include "config.h" Err bitreich.org 70 i- Err bitreich.org 70 i-struct commitinfo { Err bitreich.org 70 i- const git_oid *id; Err bitreich.org 70 i- Err bitreich.org 70 i- char oid[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i- char parentoid[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i- Err bitreich.org 70 i- const git_signature *author; Err bitreich.org 70 i- const char *summary; Err bitreich.org 70 i- const char *msg; Err bitreich.org 70 i- Err bitreich.org 70 i- git_diff_stats *stats; Err bitreich.org 70 i- git_diff *diff; Err bitreich.org 70 i- git_commit *commit; Err bitreich.org 70 i- git_commit *parent; Err bitreich.org 70 i- git_tree *commit_tree; Err bitreich.org 70 i- git_tree *parent_tree; Err bitreich.org 70 i- Err bitreich.org 70 i- size_t addcount; Err bitreich.org 70 i- size_t delcount; Err bitreich.org 70 i- size_t filecount; Err bitreich.org 70 i-}; Err bitreich.org 70 i- Err bitreich.org 70 i-static git_repository *repo; Err bitreich.org 70 i- Err bitreich.org 70 i-static const char *relpath = ""; Err bitreich.org 70 i-static const char *repodir; Err bitreich.org 70 i- Err bitreich.org 70 i-static char name[255]; Err bitreich.org 70 i-static char description[255]; Err bitreich.org 70 i-static char cloneurl[1024]; Err bitreich.org 70 i-static int hasreadme, haslicense; Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-commitinfo_free(struct commitinfo *ci) Err bitreich.org 70 i-{ Err bitreich.org 70 i- if (!ci) Err bitreich.org 70 i- return; Err bitreich.org 70 i- Err bitreich.org 70 i- git_diff_stats_free(ci->stats); Err bitreich.org 70 i- git_diff_free(ci->diff); Err bitreich.org 70 i- git_tree_free(ci->commit_tree); Err bitreich.org 70 i- git_tree_free(ci->parent_tree); Err bitreich.org 70 i- git_commit_free(ci->commit); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-struct commitinfo * Err bitreich.org 70 i-commitinfo_getbyoid(const git_oid *id) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct commitinfo *ci; Err bitreich.org 70 i- git_diff_options opts; Err bitreich.org 70 i- int error; Err bitreich.org 70 i- Err bitreich.org 70 i- if (!(ci = calloc(1, sizeof(struct commitinfo)))) Err bitreich.org 70 i- err(1, "calloc"); Err bitreich.org 70 i- Err bitreich.org 70 i- ci->id = id; Err bitreich.org 70 i- if (git_commit_lookup(&(ci->commit), repo, id)) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- Err bitreich.org 70 i- git_oid_tostr(ci->oid, sizeof(ci->oid), git_commit_id(ci->commit)); Err bitreich.org 70 i- git_oid_tostr(ci->parentoid, sizeof(ci->parentoid), git_commit_parent_id(ci->commit, 0)); Err bitreich.org 70 i- Err bitreich.org 70 i- ci->author = git_commit_author(ci->commit); Err bitreich.org 70 i- ci->summary = git_commit_summary(ci->commit); Err bitreich.org 70 i- ci->msg = git_commit_message(ci->commit); Err bitreich.org 70 i- Err bitreich.org 70 i- if ((error = git_commit_tree(&(ci->commit_tree), ci->commit))) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- if (!(error = git_commit_parent(&(ci->parent), ci->commit, 0))) { Err bitreich.org 70 i- if ((error = git_commit_tree(&(ci->parent_tree), ci->parent))) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- } else { Err bitreich.org 70 i- ci->parent = NULL; Err bitreich.org 70 i- ci->parent_tree = NULL; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- git_diff_init_options(&opts, GIT_DIFF_OPTIONS_VERSION); Err bitreich.org 70 i- opts.flags |= GIT_DIFF_DISABLE_PATHSPEC_MATCH; Err bitreich.org 70 i- if ((error = git_diff_tree_to_tree(&(ci->diff), repo, ci->parent_tree, ci->commit_tree, &opts))) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- if (git_diff_get_stats(&(ci->stats), ci->diff)) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- Err bitreich.org 70 i- ci->addcount = git_diff_stats_insertions(ci->stats); Err bitreich.org 70 i- ci->delcount = git_diff_stats_deletions(ci->stats); Err bitreich.org 70 i- ci->filecount = git_diff_stats_files_changed(ci->stats); Err bitreich.org 70 i- Err bitreich.org 70 i- return ci; Err bitreich.org 70 i- Err bitreich.org 70 i-err: Err bitreich.org 70 i- commitinfo_free(ci); Err bitreich.org 70 i- free(ci); Err bitreich.org 70 i- Err bitreich.org 70 i- return NULL; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-FILE * Err bitreich.org 70 i-efopen(const char *name, const char *flags) Err bitreich.org 70 i-{ Err bitreich.org 70 i- FILE *fp; Err bitreich.org 70 i- Err bitreich.org 70 i- if (!(fp = fopen(name, flags))) Err bitreich.org 70 i- err(1, "fopen"); Err bitreich.org 70 i- Err bitreich.org 70 i- return fp; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-/* Escape characters below as HTML 2.0 / XML 1.0. */ Err bitreich.org 70 i-void Err bitreich.org 70 i-xmlencode(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i-{ Err bitreich.org 70 i- size_t i; Err bitreich.org 70 i- Err bitreich.org 70 i- for (i = 0; *s && i < len; s++, i++) { Err bitreich.org 70 i- switch(*s) { Err bitreich.org 70 i- case '<': fputs("<", fp); break; Err bitreich.org 70 i- case '>': fputs(">", fp); break; Err bitreich.org 70 i- case '\'': fputs("'", fp); break; Err bitreich.org 70 i- case '&': fputs("&", fp); break; Err bitreich.org 70 i- case '"': fputs(""", fp); break; Err bitreich.org 70 i- default: fputc(*s, fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-/* Some implementations of dirname(3) return a pointer to a static Err bitreich.org 70 i- * internal buffer (OpenBSD). Others modify the contents of `path` (POSIX). Err bitreich.org 70 i- * This is a wrapper function that is compatible with both versions. Err bitreich.org 70 i- * The program will error out if dirname(3) failed, this can only happen Err bitreich.org 70 i- * with the OpenBSD version. */ Err bitreich.org 70 i-char * Err bitreich.org 70 i-xdirname(const char *path) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char *p, *b; Err bitreich.org 70 i- Err bitreich.org 70 i- if (!(p = strdup(path))) Err bitreich.org 70 i- err(1, "strdup"); Err bitreich.org 70 i- if (!(b = dirname(p))) Err bitreich.org 70 i- err(1, "basename"); Err bitreich.org 70 i- if (!(b = strdup(b))) Err bitreich.org 70 i- err(1, "strdup"); Err bitreich.org 70 i- free(p); Err bitreich.org 70 i- Err bitreich.org 70 i- return b; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-/* Some implementations of basename(3) return a pointer to a static Err bitreich.org 70 i- * internal buffer (OpenBSD). Others modify the contents of `path` (POSIX). Err bitreich.org 70 i- * This is a wrapper function that is compatible with both versions. Err bitreich.org 70 i- * The program will error out if basename(3) failed, this can only happen Err bitreich.org 70 i- * with the OpenBSD version. */ Err bitreich.org 70 i-char * Err bitreich.org 70 i-xbasename(const char *path) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char *p, *b; Err bitreich.org 70 i- Err bitreich.org 70 i- if (!(p = strdup(path))) Err bitreich.org 70 i- err(1, "strdup"); Err bitreich.org 70 i- if (!(b = basename(p))) Err bitreich.org 70 i- err(1, "basename"); Err bitreich.org 70 i- if (!(b = strdup(b))) Err bitreich.org 70 i- err(1, "strdup"); Err bitreich.org 70 i- free(p); Err bitreich.org 70 i- Err bitreich.org 70 i- return b; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-mkdirp(const char *path) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char tmp[PATH_MAX], *p; Err bitreich.org 70 i- Err bitreich.org 70 i- strlcpy(tmp, path, sizeof(tmp)); Err bitreich.org 70 i- for (p = tmp + (tmp[0] == '/'); *p; p++) { Err bitreich.org 70 i- if (*p != '/') Err bitreich.org 70 i- continue; Err bitreich.org 70 i- *p = '\0'; Err bitreich.org 70 i- if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- *p = '/'; Err bitreich.org 70 i- } Err bitreich.org 70 i- if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printtimeformat(FILE *fp, const git_time *intime, const char *fmt) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct tm *intm; Err bitreich.org 70 i- time_t t; Err bitreich.org 70 i- char out[32]; Err bitreich.org 70 i- Err bitreich.org 70 i- t = (time_t) intime->time + (intime->offset * 60); Err bitreich.org 70 i- intm = gmtime(&t); Err bitreich.org 70 i- strftime(out, sizeof(out), fmt, intm); Err bitreich.org 70 i- fputs(out, fp); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printtimez(FILE *fp, const git_time *intime) Err bitreich.org 70 i-{ Err bitreich.org 70 i- printtimeformat(fp, intime, "%Y-%m-%dT%H:%M:%SZ"); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printtime(FILE *fp, const git_time *intime) Err bitreich.org 70 i-{ Err bitreich.org 70 i- printtimeformat(fp, intime, "%a %b %e %T %Y"); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printtimeshort(FILE *fp, const git_time *intime) Err bitreich.org 70 i-{ Err bitreich.org 70 i- printtimeformat(fp, intime, "%Y-%m-%d %H:%M"); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-writeheader(FILE *fp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- fputs("" Err bitreich.org 70 i- "\n\n" Err bitreich.org 70 i- "\n" Err bitreich.org 70 i- "\n", fp); Err bitreich.org 70 i- xmlencode(fp, name, strlen(name)); Err bitreich.org 70 i- if (description[0]) Err bitreich.org 70 i- fputs(" - ", fp); Err bitreich.org 70 i- xmlencode(fp, description, strlen(description)); Err bitreich.org 70 i- fprintf(fp, "\n\n", relpath); Err bitreich.org 70 i- fprintf(fp, "\n", Err bitreich.org 70 i- name, relpath); Err bitreich.org 70 i- fprintf(fp, "\n", relpath); Err bitreich.org 70 i- fputs("\n\n", fp); Err bitreich.org 70 i- if (cloneurl[0]) { Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputs("
", fp); Err bitreich.org 70 i- fprintf(fp, "\"\"", Err bitreich.org 70 i- relpath, relpath); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i- xmlencode(fp, name, strlen(name)); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i- xmlencode(fp, description, strlen(description)); Err bitreich.org 70 i- fputs("
git clone ", fp); Err bitreich.org 70 i- xmlencode(fp, cloneurl, strlen(cloneurl)); Err bitreich.org 70 i- fputs("
\n", fp); Err bitreich.org 70 i- fprintf(fp, "Log | ", relpath); Err bitreich.org 70 i- fprintf(fp, "Files", relpath); Err bitreich.org 70 i- if (hasreadme) Err bitreich.org 70 i- fprintf(fp, " | README", relpath); Err bitreich.org 70 i- if (haslicense) Err bitreich.org 70 i- fprintf(fp, " | LICENSE", relpath); Err bitreich.org 70 i- fputs("
\n
\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-writefooter(FILE *fp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- return !fputs("
\n", fp); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-writeblobhtml(FILE *fp, const git_blob *blob) Err bitreich.org 70 i-{ Err bitreich.org 70 i- off_t i = 0; Err bitreich.org 70 i- size_t n = 1; Err bitreich.org 70 i- char *nfmt = "%d\n"; Err bitreich.org 70 i- const char *s = git_blob_rawcontent(blob); Err bitreich.org 70 i- git_off_t len = git_blob_rawsize(blob); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("
\n", fp);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (len) {	Err	bitreich.org	70
i-                fprintf(fp, nfmt, n, n, n);	Err	bitreich.org	70
i-                while (i < len - 1) {	Err	bitreich.org	70
i-                        if (s[i] == '\n') {	Err	bitreich.org	70
i-                                n++;	Err	bitreich.org	70
i-                                fprintf(fp, nfmt, n, n, n);	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                        i++;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        fputs("
\n", fp);	Err	bitreich.org	70
i-        xmlencode(fp, s, (size_t)len);	Err	bitreich.org	70
i-        fputs("
\n", fp); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printcommit(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i-{ Err bitreich.org 70 i- fprintf(fp, "commit %s\n", Err bitreich.org 70 i- relpath, ci->oid, ci->oid); Err bitreich.org 70 i- Err bitreich.org 70 i- if (ci->parentoid[0]) Err bitreich.org 70 i- fprintf(fp, "parent %s\n", Err bitreich.org 70 i- relpath, ci->parentoid, ci->parentoid); Err bitreich.org 70 i- Err bitreich.org 70 i-#if 0 Err bitreich.org 70 i- if ((count = (int)git_commit_parentcount(commit)) > 1) { Err bitreich.org 70 i- fprintf(fp, "Merge:"); Err bitreich.org 70 i- for (i = 0; i < count; i++) { Err bitreich.org 70 i- git_oid_tostr(buf, 8, git_commit_parent_id(commit, i)); Err bitreich.org 70 i- fprintf(fp, " %s", Err bitreich.org 70 i- relpath, buf, buf); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputc('\n', fp); Err bitreich.org 70 i- } Err bitreich.org 70 i-#endif Err bitreich.org 70 i- if (ci->author) { Err bitreich.org 70 i- fprintf(fp, "Author: "); Err bitreich.org 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fprintf(fp, " <author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fputs("\">", fp); Err bitreich.org 70 i- xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fputs(">\nDate: ", fp); Err bitreich.org 70 i- printtime(fp, &(ci->author->when)); Err bitreich.org 70 i- fputc('\n', fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputc('\n', fp); Err bitreich.org 70 i- Err bitreich.org 70 i- if (ci->msg) Err bitreich.org 70 i- xmlencode(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i- Err bitreich.org 70 i- fputc('\n', fp); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printshowfile(struct commitinfo *ci) Err bitreich.org 70 i-{ Err bitreich.org 70 i- const git_diff_delta *delta; Err bitreich.org 70 i- const git_diff_hunk *hunk; Err bitreich.org 70 i- const git_diff_line *line; Err bitreich.org 70 i- git_patch *patch; Err bitreich.org 70 i- git_buf statsbuf; Err bitreich.org 70 i- size_t ndeltas, nhunks, nhunklines; Err bitreich.org 70 i- FILE *fp; Err bitreich.org 70 i- size_t i, j, k; Err bitreich.org 70 i- char path[PATH_MAX]; Err bitreich.org 70 i- Err bitreich.org 70 i- snprintf(path, sizeof(path), "commit/%s.html", ci->oid); Err bitreich.org 70 i- /* check if file exists if so skip it */ Err bitreich.org 70 i- if (!access(path, F_OK)) Err bitreich.org 70 i- return; Err bitreich.org 70 i- Err bitreich.org 70 i- fp = efopen(path, "w"); Err bitreich.org 70 i- writeheader(fp); Err bitreich.org 70 i- fputs("
\n", fp);	Err	bitreich.org	70
i-        printcommit(fp, ci);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        memset(&statsbuf, 0, sizeof(statsbuf));	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        /* diff stat */	Err	bitreich.org	70
i-        if (ci->stats) {	Err	bitreich.org	70
i-                if (!git_diff_stats_to_buf(&statsbuf, ci->stats,	Err	bitreich.org	70
i-                    GIT_DIFF_STATS_FULL | GIT_DIFF_STATS_SHORT, 80)) {	Err	bitreich.org	70
i-                        if (statsbuf.ptr && statsbuf.ptr[0]) {	Err	bitreich.org	70
i-                                fprintf(fp, "Diffstat:\n");	Err	bitreich.org	70
i-                                fputs(statsbuf.ptr, fp);	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        fputs("
", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- ndeltas = git_diff_num_deltas(ci->diff); Err bitreich.org 70 i- for (i = 0; i < ndeltas; i++) { Err bitreich.org 70 i- if (git_patch_from_diff(&patch, ci->diff, i)) { Err bitreich.org 70 i- git_patch_free(patch); Err bitreich.org 70 i- break; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- delta = git_patch_get_delta(patch); Err bitreich.org 70 i- fprintf(fp, "diff --git a/%s b/%s\n", Err bitreich.org 70 i- relpath, delta->old_file.path, delta->old_file.path, Err bitreich.org 70 i- relpath, delta->new_file.path, delta->new_file.path); Err bitreich.org 70 i- Err bitreich.org 70 i- /* check binary data */ Err bitreich.org 70 i- if (delta->flags & GIT_DIFF_FLAG_BINARY) { Err bitreich.org 70 i- fputs("Binary files differ\n", fp); Err bitreich.org 70 i- git_patch_free(patch); Err bitreich.org 70 i- continue; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- nhunks = git_patch_num_hunks(patch); Err bitreich.org 70 i- for (j = 0; j < nhunks; j++) { Err bitreich.org 70 i- if (git_patch_get_hunk(&hunk, &nhunklines, patch, j)) Err bitreich.org 70 i- break; Err bitreich.org 70 i- Err bitreich.org 70 i- fprintf(fp, "%s\n", hunk->header); Err bitreich.org 70 i- Err bitreich.org 70 i- for (k = 0; ; k++) { Err bitreich.org 70 i- if (git_patch_get_line_in_hunk(&line, patch, j, k)) Err bitreich.org 70 i- break; Err bitreich.org 70 i- if (line->old_lineno == -1) Err bitreich.org 70 i- fprintf(fp, "+", Err bitreich.org 70 i- j, k, j, k); Err bitreich.org 70 i- else if (line->new_lineno == -1) Err bitreich.org 70 i- fprintf(fp, "-", Err bitreich.org 70 i- j, k, j, k); Err bitreich.org 70 i- else Err bitreich.org 70 i- fputc(' ', fp); Err bitreich.org 70 i- xmlencode(fp, line->content, line->content_len); Err bitreich.org 70 i- if (line->old_lineno == -1 || line->new_lineno == -1) Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i- git_patch_free(patch); Err bitreich.org 70 i- } Err bitreich.org 70 i- git_buf_free(&statsbuf); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs( "
\n", fp); Err bitreich.org 70 i- writefooter(fp); Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i- return; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-writelog(FILE *fp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct commitinfo *ci; Err bitreich.org 70 i- git_revwalk *w = NULL; Err bitreich.org 70 i- git_oid id; Err bitreich.org 70 i- size_t len; Err bitreich.org 70 i- Err bitreich.org 70 i- mkdir("commit", 0755); Err bitreich.org 70 i- Err bitreich.org 70 i- git_revwalk_new(&w, repo); Err bitreich.org 70 i- git_revwalk_push_head(w); Err bitreich.org 70 i- git_revwalk_sorting(w, GIT_SORT_TIME); Err bitreich.org 70 i- git_revwalk_simplify_first_parent(w); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "\n\n", fp); Err bitreich.org 70 i- while (!git_revwalk_next(&id, w)) { Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i- Err bitreich.org 70 i- if (!(ci = commitinfo_getbyoid(&id))) Err bitreich.org 70 i- break; Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- relpath = "../"; Err bitreich.org 70 i- printshowfile(ci); Err bitreich.org 70 i- Err bitreich.org 70 i- commitinfo_free(ci); Err bitreich.org 70 i- } Err bitreich.org 70 i- fprintf(fp, "
AgeCommit messageAuthorFiles+-
", fp); Err bitreich.org 70 i- if (ci->author) Err bitreich.org 70 i- printtimeshort(fp, &(ci->author->when)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- if (ci->summary) { Err bitreich.org 70 i- fprintf(fp, "", relpath, ci->oid); Err bitreich.org 70 i- if ((len = strlen(ci->summary)) > summarylen) { Err bitreich.org 70 i- xmlencode(fp, ci->summary, summarylen - 1); Err bitreich.org 70 i- fputs("…", fp); Err bitreich.org 70 i- } else { Err bitreich.org 70 i- xmlencode(fp, ci->summary, len); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- if (ci->author) Err bitreich.org 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "%zu", ci->filecount); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "+%zu", ci->addcount); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "-%zu", ci->delcount); Err bitreich.org 70 i- fputs("
"); Err bitreich.org 70 i- Err bitreich.org 70 i- git_revwalk_free(w); Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-printcommitatom(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i-{ Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- fprintf(fp, "%s\n", ci->oid); Err bitreich.org 70 i- if (ci->author) { Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- printtimez(fp, &(ci->author->when)); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- if (ci->summary) { Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- xmlencode(fp, ci->summary, strlen(ci->summary)); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "commit %s\n", ci->oid); Err bitreich.org 70 i- if (ci->parentoid[0]) Err bitreich.org 70 i- fprintf(fp, "parent %s\n", ci->parentoid); Err bitreich.org 70 i- Err bitreich.org 70 i-#if 0 Err bitreich.org 70 i- if ((count = (int)git_commit_parentcount(commit)) > 1) { Err bitreich.org 70 i- fprintf(fp, "Merge:"); Err bitreich.org 70 i- for (i = 0; i < count; i++) { Err bitreich.org 70 i- git_oid_tostr(buf, 8, git_commit_parent_id(commit, i)); Err bitreich.org 70 i- fprintf(fp, " %s", buf); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputc('\n', fp); Err bitreich.org 70 i- } Err bitreich.org 70 i-#endif Err bitreich.org 70 i- Err bitreich.org 70 i- if (ci->author) { Err bitreich.org 70 i- fprintf(fp, "Author: "); Err bitreich.org 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fprintf(fp, " <"); Err bitreich.org 70 i- xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fprintf(fp, ">\nDate: "); Err bitreich.org 70 i- printtime(fp, &(ci->author->when)); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputc('\n', fp); Err bitreich.org 70 i- Err bitreich.org 70 i- if (ci->msg) Err bitreich.org 70 i- xmlencode(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i- fputs("\n\n", fp); Err bitreich.org 70 i- if (ci->author) { Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fputs("\n\n", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-writeatom(FILE *fp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct commitinfo *ci; Err bitreich.org 70 i- git_revwalk *w = NULL; Err bitreich.org 70 i- git_oid id; Err bitreich.org 70 i- size_t i, m = 100; /* max */ Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "\n", fp); Err bitreich.org 70 i- xmlencode(fp, name, strlen(name)); Err bitreich.org 70 i- fputs(", branch master\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- xmlencode(fp, description, strlen(description)); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- git_revwalk_new(&w, repo); Err bitreich.org 70 i- git_revwalk_push_head(w); Err bitreich.org 70 i- git_revwalk_sorting(w, GIT_SORT_TIME); Err bitreich.org 70 i- git_revwalk_simplify_first_parent(w); Err bitreich.org 70 i- Err bitreich.org 70 i- for (i = 0; i < m && !git_revwalk_next(&id, w); i++) { Err bitreich.org 70 i- if (!(ci = commitinfo_getbyoid(&id))) Err bitreich.org 70 i- break; Err bitreich.org 70 i- printcommitatom(fp, ci); Err bitreich.org 70 i- commitinfo_free(ci); Err bitreich.org 70 i- } Err bitreich.org 70 i- git_revwalk_free(w); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-writeblob(git_object *obj, const char *filename, git_off_t filesize) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char fpath[PATH_MAX]; Err bitreich.org 70 i- char tmp[PATH_MAX] = ""; Err bitreich.org 70 i- char *d, *p; Err bitreich.org 70 i- FILE *fp; Err bitreich.org 70 i- Err bitreich.org 70 i- snprintf(fpath, sizeof(fpath), "file/%s.html", filename); Err bitreich.org 70 i- d = xdirname(fpath); Err bitreich.org 70 i- if (mkdirp(d)) { Err bitreich.org 70 i- free(d); Err bitreich.org 70 i- return 1; Err bitreich.org 70 i- } Err bitreich.org 70 i- free(d); Err bitreich.org 70 i- Err bitreich.org 70 i- p = fpath; Err bitreich.org 70 i- while (*p) { Err bitreich.org 70 i- if (*p == '/') Err bitreich.org 70 i- strlcat(tmp, "../", sizeof(tmp)); Err bitreich.org 70 i- p++; Err bitreich.org 70 i- } Err bitreich.org 70 i- relpath = tmp; Err bitreich.org 70 i- Err bitreich.org 70 i- fp = efopen(fpath, "w"); Err bitreich.org 70 i- writeheader(fp); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i- xmlencode(fp, filename, strlen(filename)); Err bitreich.org 70 i- fprintf(fp, " (%" PRIu32 "b)", filesize); Err bitreich.org 70 i- fputs("


", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- if (git_blob_is_binary((git_blob *)obj)) { Err bitreich.org 70 i- fprintf(fp, "

Binary file

\n"); Err bitreich.org 70 i- } else { Err bitreich.org 70 i- writeblobhtml(fp, (git_blob *)obj); Err bitreich.org 70 i- if (ferror(fp)) Err bitreich.org 70 i- err(1, "fwrite"); Err bitreich.org 70 i- } Err bitreich.org 70 i- writefooter(fp); Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i- Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i- Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-const char * Err bitreich.org 70 i-filemode(git_filemode_t m) Err bitreich.org 70 i-{ Err bitreich.org 70 i- static char mode[11]; Err bitreich.org 70 i- Err bitreich.org 70 i- memset(mode, '-', sizeof(mode) - 1); Err bitreich.org 70 i- mode[10] = '\0'; Err bitreich.org 70 i- Err bitreich.org 70 i- if (S_ISREG(m)) Err bitreich.org 70 i- mode[0] = '-'; Err bitreich.org 70 i- else if (S_ISBLK(m)) Err bitreich.org 70 i- mode[0] = 'b'; Err bitreich.org 70 i- else if (S_ISCHR(m)) Err bitreich.org 70 i- mode[0] = 'c'; Err bitreich.org 70 i- else if (S_ISDIR(m)) Err bitreich.org 70 i- mode[0] = 'd'; Err bitreich.org 70 i- else if (S_ISFIFO(m)) Err bitreich.org 70 i- mode[0] = 'p'; Err bitreich.org 70 i- else if (S_ISLNK(m)) Err bitreich.org 70 i- mode[0] = 'l'; Err bitreich.org 70 i- else if (S_ISSOCK(m)) Err bitreich.org 70 i- mode[0] = 's'; Err bitreich.org 70 i- else Err bitreich.org 70 i- mode[0] = '?'; Err bitreich.org 70 i- Err bitreich.org 70 i- if (m & S_IRUSR) mode[1] = 'r'; Err bitreich.org 70 i- if (m & S_IWUSR) mode[2] = 'w'; Err bitreich.org 70 i- if (m & S_IXUSR) mode[3] = 'x'; Err bitreich.org 70 i- if (m & S_IRGRP) mode[4] = 'r'; Err bitreich.org 70 i- if (m & S_IWGRP) mode[5] = 'w'; Err bitreich.org 70 i- if (m & S_IXGRP) mode[6] = 'x'; Err bitreich.org 70 i- if (m & S_IROTH) mode[7] = 'r'; Err bitreich.org 70 i- if (m & S_IWOTH) mode[8] = 'w'; Err bitreich.org 70 i- if (m & S_IXOTH) mode[9] = 'x'; Err bitreich.org 70 i- Err bitreich.org 70 i- if (m & S_ISUID) mode[3] = (mode[3] == 'x') ? 's' : 'S'; Err bitreich.org 70 i- if (m & S_ISGID) mode[6] = (mode[6] == 'x') ? 's' : 'S'; Err bitreich.org 70 i- if (m & S_ISVTX) mode[9] = (mode[9] == 'x') ? 't' : 'T'; Err bitreich.org 70 i- Err bitreich.org 70 i- return mode; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-writefilestree(FILE *fp, git_tree *tree, const char *path) Err bitreich.org 70 i-{ Err bitreich.org 70 i- const git_tree_entry *entry = NULL; Err bitreich.org 70 i- const char *filename; Err bitreich.org 70 i- char filepath[PATH_MAX]; Err bitreich.org 70 i- git_object *obj = NULL; Err bitreich.org 70 i- git_off_t filesize; Err bitreich.org 70 i- size_t count, i; Err bitreich.org 70 i- int ret; Err bitreich.org 70 i- Err bitreich.org 70 i- count = git_tree_entrycount(tree); Err bitreich.org 70 i- for (i = 0; i < count; i++) { Err bitreich.org 70 i- if (!(entry = git_tree_entry_byindex(tree, i))) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- Err bitreich.org 70 i- filename = git_tree_entry_name(entry); Err bitreich.org 70 i- if (git_tree_entry_to_object(&obj, repo, entry)) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- switch (git_object_type(obj)) { Err bitreich.org 70 i- case GIT_OBJ_BLOB: Err bitreich.org 70 i- break; Err bitreich.org 70 i- case GIT_OBJ_TREE: Err bitreich.org 70 i- ret = writefilestree(fp, (git_tree *)obj, filename); Err bitreich.org 70 i- git_object_free(obj); Err bitreich.org 70 i- if (ret) Err bitreich.org 70 i- return ret; Err bitreich.org 70 i- continue; Err bitreich.org 70 i- default: Err bitreich.org 70 i- git_object_free(obj); Err bitreich.org 70 i- continue; Err bitreich.org 70 i- } Err bitreich.org 70 i- if (path[0]) { Err bitreich.org 70 i- snprintf(filepath, sizeof(filepath), "%s/%s", path, filename); Err bitreich.org 70 i- filename = filepath; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- filesize = git_blob_rawsize((git_blob *)obj); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "%s", filemode(git_tree_entry_filemode(entry))); Err bitreich.org 70 i- fprintf(fp, "", fp); Err bitreich.org 70 i- xmlencode(fp, filename, strlen(filename)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "%" PRIu32, filesize); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- writeblob(obj, filename, filesize); Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-writefiles(FILE *fp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- const git_oid *id; Err bitreich.org 70 i- git_tree *tree = NULL; Err bitreich.org 70 i- git_object *obj = NULL; Err bitreich.org 70 i- git_commit *commit = NULL; Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "\n\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- if (git_revparse_single(&obj, repo, "HEAD")) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- id = git_object_id(obj); Err bitreich.org 70 i- if (git_commit_lookup(&commit, repo, id)) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- if (git_commit_tree(&tree, commit)) { Err bitreich.org 70 i- git_commit_free(commit); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i- git_commit_free(commit); Err bitreich.org 70 i- Err bitreich.org 70 i- writefilestree(fp, tree, ""); Err bitreich.org 70 i- Err bitreich.org 70 i- git_commit_free(commit); Err bitreich.org 70 i- git_tree_free(tree); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("
ModeNameSize
", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-main(int argc, char *argv[]) Err bitreich.org 70 i-{ Err bitreich.org 70 i- git_object *obj = NULL; Err bitreich.org 70 i- const git_error *e = NULL; Err bitreich.org 70 i- FILE *fp, *fpread; Err bitreich.org 70 i- char path[PATH_MAX], *p; Err bitreich.org 70 i- int status; Err bitreich.org 70 i- Err bitreich.org 70 i- if (argc != 2) { Err bitreich.org 70 i- fprintf(stderr, "%s \n", argv[0]); Err bitreich.org 70 i- return 1; Err bitreich.org 70 i- } Err bitreich.org 70 i- repodir = argv[1]; Err bitreich.org 70 i- Err bitreich.org 70 i- git_libgit2_init(); Err bitreich.org 70 i- Err bitreich.org 70 i- if ((status = git_repository_open_ext(&repo, repodir, Err bitreich.org 70 i- GIT_REPOSITORY_OPEN_NO_SEARCH, NULL)) < 0) { Err bitreich.org 70 i- e = giterr_last(); Err bitreich.org 70 i- fprintf(stderr, "error %d/%d: %s\n", status, e->klass, e->message); Err bitreich.org 70 i- return status; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- /* use directory name as name */ Err bitreich.org 70 i- p = xbasename(repodir); Err bitreich.org 70 i- snprintf(name, sizeof(name), "%s", p); Err bitreich.org 70 i- free(p); Err bitreich.org 70 i- Err bitreich.org 70 i- /* read description or .git/description */ Err bitreich.org 70 i- snprintf(path, sizeof(path), "%s%s%s", Err bitreich.org 70 i- repodir, repodir[strlen(repodir)] == '/' ? "" : "/", "description"); Err bitreich.org 70 i- if (!(fpread = fopen(path, "r"))) { Err bitreich.org 70 i- snprintf(path, sizeof(path), "%s%s%s", Err bitreich.org 70 i- repodir, repodir[strlen(repodir)] == '/' ? "" : "/", ".git/description"); Err bitreich.org 70 i- fpread = fopen(path, "r"); Err bitreich.org 70 i- } Err bitreich.org 70 i- if (fpread) { Err bitreich.org 70 i- if (!fgets(description, sizeof(description), fpread)) Err bitreich.org 70 i- description[0] = '\0'; Err bitreich.org 70 i- fclose(fpread); Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- /* read url or .git/url */ Err bitreich.org 70 i- snprintf(path, sizeof(path), "%s%s%s", Err bitreich.org 70 i- repodir, repodir[strlen(repodir)] == '/' ? "" : "/", "url"); Err bitreich.org 70 i- if (!(fpread = fopen(path, "r"))) { Err bitreich.org 70 i- snprintf(path, sizeof(path), "%s%s%s", Err bitreich.org 70 i- repodir, repodir[strlen(repodir)] == '/' ? "" : "/", ".git/url"); Err bitreich.org 70 i- fpread = fopen(path, "r"); Err bitreich.org 70 i- } Err bitreich.org 70 i- if (fpread) { Err bitreich.org 70 i- if (!fgets(cloneurl, sizeof(cloneurl), fpread)) Err bitreich.org 70 i- cloneurl[0] = '\0'; Err bitreich.org 70 i- fclose(fpread); Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- /* check LICENSE */ Err bitreich.org 70 i- haslicense = !git_revparse_single(&obj, repo, "HEAD:LICENSE"); Err bitreich.org 70 i- git_object_free(obj); Err bitreich.org 70 i- /* check README */ Err bitreich.org 70 i- hasreadme = !git_revparse_single(&obj, repo, "HEAD:README"); Err bitreich.org 70 i- git_object_free(obj); Err bitreich.org 70 i- Err bitreich.org 70 i- fp = efopen("log.html", "w"); Err bitreich.org 70 i- writeheader(fp); Err bitreich.org 70 i- writelog(fp); Err bitreich.org 70 i- writefooter(fp); Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i- Err bitreich.org 70 i- fp = efopen("files.html", "w"); Err bitreich.org 70 i- writeheader(fp); Err bitreich.org 70 i- writefiles(fp); Err bitreich.org 70 i- writefooter(fp); Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i- Err bitreich.org 70 i- /* Atom feed */ Err bitreich.org 70 i- fp = efopen("atom.xml", "w"); Err bitreich.org 70 i- writeatom(fp); Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i- Err bitreich.org 70 i- /* cleanup */ Err bitreich.org 70 i- git_repository_free(repo); Err bitreich.org 70 i- git_libgit2_shutdown(); Err bitreich.org 70 i- Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 .