summaryrefslogtreecommitdiffstatshomepage
path: root/ui-repolist.c
blob: 2ce0d6a62a885a83e700fb885e8dc357bc282e10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* ui-repolist.c: functions for generating the repolist page
 *
 * Copyright (C) 2006 Lars Hjemli
 *
 * Licensed under GNU General Public License v2
 *   (see COPYING for full license text)
 */

#include "cgit.h"

void cgit_print_repolist(struct cacheitem *item)
{
	struct repoinfo *repo;
	int i;

	cgit_print_docstart(cgit_root_title, item);
	cgit_print_pageheader(cgit_root_title, 0);

	html("<table class='list nowrap'>");
	html("<tr class='nohover'>"
	     "<th class='left'>Name</th>"
	     "<th class='left'>Description</th>"
	     "<th class='left'>Owner</th></tr>\n");

	for (i=0; i<cgit_repolist.count; i++) {
		repo = &cgit_repolist.repos[i];
		html("<tr><td>");
		html_link_open(cgit_repourl(repo->url), NULL, NULL);
		html_txt(repo->name);
		html_link_close();
		html("</td><td>");
		html_txt(repo->desc);
		html("</td><td>");
		html_txt(repo->owner);
		html("</td></tr>\n");
	}
	html("</table>");
	cgit_print_docend();
}
test -z "$quiet" then echo -e "$@" fi } die() { echo >&2 -e "$@" exit 1 } # # Silently checkout specified submodule revision, return exit status of git-checkout # # $1 = local path # $2 = requested sha1 # module_checkout() { $(cd "$1" && git checkout "$2" 1>/dev/null 2>/dev/null) } # # Find all (requested) submodules, run clone + checkout on missing paths # # $@ = requested paths (default to all) # modules_init() { git ls-files --stage -- $@ | grep -e '^160000 ' | while read mode sha1 stage path do test -d "$path/.git" && continue if test -d "$path" then rmdir "$path" 2>/dev/null || die "Directory '$path' exist, but not as a submodule" fi test -e "$path" && die "A file already exist at path '$path'" url=$(sed -nre "s/^$path[ \t]+//p" .gitmodules) test -z "$url" && die "No url found for $path in .gitmodules" git clone "$url" "$path" || die "Clone of submodule '$path' failed" module_checkout "$path" "$sha1" || die "Checkout of submodule '$path' failed" say "Submodule '$path' initialized" done } # # Checkout correct revision of each initialized submodule # # $@ = requested paths (default to all) # modules_update() { git ls-files --stage -- $@ | grep -e '^160000 ' | while read mode sha1 stage path do if ! test -d "$path/.git" then say "Submodule '$path' not initialized" continue; fi subsha1=$(cd "$path" && git rev-parse --verify HEAD) || die "Unable to find current revision of submodule '$path'" if test "$subsha1" != "$sha1" then module_checkout "$path" "$sha1" || die "Unable to checkout revision $sha1 of submodule '$path'" say "Submodule '$path' reset to revision $sha1" fi done } # # List all registered submodules, prefixed with: # - submodule not initialized # + different version checked out # # If --cached was specified the revision in the index will be printed # instead of the currently checked out revision. # # $@ = requested paths (default to all) # modules_list() { git ls-files --stage -- $@ | grep -e '^160000 ' | while read mode sha1 stage path do if ! test -d "$path/.git" then say "-$sha1 $path" continue; fi revname=$(cd "$path" && git describe $sha1) if git diff-files --quiet -- "$path" then say " $sha1 $path\t($revname)" else if test -z "$cached" then sha1=$(cd "$path" && git rev-parse HEAD) revname=$(cd "$path" && git describe HEAD) fi say "+$sha1 $path\t($revname)" fi done } while case "$#" in 0) break ;; esac do case "$1" in -i) init=1 ;; -u) update=1 ;; -q) quiet=1 ;; --cached) cached=1 ;; --) break ;; -*) echo "Usage: $usage" exit 1 ;; --*) echo "Usage: $usage" exit 1 ;; *) break ;; esac shift done if test "$init" = "1" then modules_init $@ elif test "$update" = "1" then modules_update $@ else modules_list $@ fi