diff --git a/main.go b/main.go index fdb4846..4c453b9 100644 --- a/main.go +++ b/main.go @@ -42,30 +42,32 @@ const forceRebuild = false //go:embed config.tmpl var tmpl string -func main() { - /* - usage() - { - echo "Usage $0 [-prlbq] TARGET" - echo "Generate static HTML pages in TARGET for the specified git repository." - echo - echo " -p Project's name" - echo " -r Repository to clone from." - echo " -l Public repository link, e.g., 'http://host.org/project.git'" - echo " -b List of branches to process (default: all)." - echo " -q Be quiet." - echo " -f Force rebuilding of all pages." - exit $1 - } - */ - - var project string - var repo string - var link string - var branches string - var quiet bool - var force bool +type options struct { + project string + repo string + link string + branches string + quiet bool + force bool +} +/* +usage() + + { + echo "Usage $0 [-prlbq] TARGET" + echo "Generate static HTML pages in TARGET for the specified git repository." + echo + echo " -p Project's name" + echo " -r Repository to clone from." + echo " -l Public repository link, e.g., 'http://host.org/project.git'" + echo " -b List of branches to process (default: all)." + echo " -q Be quiet." + echo " -f Force rebuilding of all pages." + exit $1 + } +*/ +func main() { /* while getopts ":p:r:l:b:qf" opt do @@ -97,13 +99,14 @@ func main() { done shift $(($OPTIND - 1)) */ - - flag.StringVar(&project, "p", "My project", "Project's name") - flag.StringVar(&repo, "r", "/path/to/repo", "Repository to clone from.") - flag.StringVar(&link, "l", "http://host.org/project.git", "Public repository link, e.g., 'http://host.org/project.git'") - flag.StringVar(&branches, "b", "all", "List of branches (default: all)") - flag.BoolVar(&quiet, "q", false, "Be quiet.") - flag.BoolVar(&force, "f", false, "Force rebuilding of all pages.") + opts := &options{} + + flag.StringVar(&opts.project, "p", "My project", "Project's name") + flag.StringVar(&opts.repo, "r", "/path/to/repo", "Repository to clone from.") + flag.StringVar(&opts.link, "l", "http://host.org/project.git", "Public repository link, e.g., 'http://host.org/project.git'") + flag.StringVar(&opts.branches, "b", "all", "List of branches (default: all)") + flag.BoolVar(&opts.quiet, "q", false, "Be quiet.") + flag.BoolVar(&opts.force, "f", false, "Force rebuilding of all pages.") flag.Parse() // TODO: print usage? @@ -114,7 +117,7 @@ func main() { fi */ - log.Printf("%v %v %v %v %v %v", project, repo, link, branches, quiet, force) + log.Printf("+%v", opts) args := os.Args @@ -172,6 +175,35 @@ func main() { fi */ + writeConfigFile(targetDir, opts) + + // TODO: check how to make -r arg mandatory + /* + if test ! -d "$REPOSITORY" + then + echo "Repository \"$REPOSITORY\" does not exists. Misconfiguration likely." + exit 1 + fi + */ + + createDirectories(targetDir, opts.force) + + setUpRepo(targetDir, opts) + + setGitConfig() + + cleanBranches := cleanUpBranches(opts.branches) + + fetchBranches(cleanBranches) + + writeIndex() + + doTheRealWork() + + writeIndexFooter() +} + +func writeConfigFile(targetDir string, opts *options) { /* # The output version CURRENT_TEMPLATE="$(sha1sum "$0")" @@ -223,49 +255,16 @@ func main() { // SHA1SUM Template string }{ - Project: project, - Repository: repo, - PublicRepository: link, + Project: opts.project, + Repository: opts.repo, + PublicRepository: opts.link, Target: targetDir, - Branches: branches, + Branches: opts.branches, Template: hex.EncodeToString(h.Sum(nil)), }) +} - // TODO: check how to make -r arg mandatory - /* - if test ! -d "$REPOSITORY" - then - echo "Repository \"$REPOSITORY\" does not exists. Misconfiguration likely." - exit 1 - fi - */ - - // TODO: implement header and footer - /* - html_header() - { - title="$1" - top_level="$2" - - if test x"$PROJECT" != x -a x"$title" != x - then - # Title is not the empty string. Prefix it with ": " - title=": $title" - fi - - echo "<html><head><title>$PROJECT$title</title></head>" \ - "<body>" \ - "<h1><a href=\"$top_level/index.html\">$PROJECT</a>$title</h1>" - } - - html_footer() - { - echo "<hr>" \ - "Generated by" \ - "<a href=\"http://hssl.cs.jhu.edu/~neal/git2html\">git2html</a>." - } - */ - +func createDirectories(targetDir string, force bool) { //# Ensure that some directories we need exist. /* if test x"$force_rebuild" = x1 @@ -306,15 +305,17 @@ func main() { log.Printf("jimmy: unable to create directory: %v", err) } } +} +func setUpRepo(targetDir string, opts *options) { var pathError *fs.PathError repoPath := filepath.Join(targetDir, "repository") - _, err = os.Stat(repoPath) + _, err := os.Stat(repoPath) if errors.As(err, &pathError) { localRepo, err := git.PlainClone(repoPath, false, &git.CloneOptions{ - URL: repo, + URL: opts.repo, Progress: os.Stdout, }) @@ -367,20 +368,9 @@ func main() { log.Printf("jimmy: failed to delete branch: %v", err) } } - - setGitConfig() - - cleanBranches := cleanUpBranches(branches) - - fetchBranches(cleanBranches) - - writeIndex() - - doTheRealWork() - - writeIndexFooter() } +// TODO: implement! func setGitConfig() { /* # git merge fails if there are not set. Fake them. @@ -389,6 +379,7 @@ func setGitConfig() { */ } +// TODO: implement! func cleanUpBranches(branches string) []string { /* if test x"$BRANCHES" = x @@ -416,9 +407,10 @@ func cleanUpBranches(branches string) []string { echo "$branch" done | sort | uniq) */ - return []string{} + return []string{} } +// TODO: implement! func fetchBranches(branches []string) { /* for branch in $BRANCHES @@ -449,6 +441,7 @@ func fetchBranches(branches []string) { */ } +// TODO: implement! func writeIndex() { /* INDEX="$TARGET/index.html" @@ -478,6 +471,7 @@ func writeIndex() { */ } +// TODO: implement! func doTheRealWork() { /* b=0 @@ -790,6 +784,7 @@ func doTheRealWork() { */ } +// TODO: implement! func writeIndexFooter() { /* { @@ -798,3 +793,35 @@ func writeIndexFooter() { } >> "$INDEX" */ } + +// TODO: implement! +func htmlHeader() { + /* + html_header() + { + title="$1" + top_level="$2" + + if test x"$PROJECT" != x -a x"$title" != x + then + # Title is not the empty string. Prefix it with ": " + title=": $title" + fi + + echo "<html><head><title>$PROJECT$title</title></head>" \ + "<body>" \ + "<h1><a href=\"$top_level/index.html\">$PROJECT</a>$title</h1>" + } + */ +} + +func htmlFooter() { + /* + html_footer() + { + echo "<hr>" \ + "Generated by" \ + "<a href=\"http://hssl.cs.jhu.edu/~neal/git2html\">git2html</a>." + } + */ +}
home › develop › d34280b › 00bcbd6