From: Lars Hjemli Date: Mon, 1 Sep 2008 20:40:24 +0000 (+0200) Subject: Merge branch 'lh/clone' X-Git-Url: https://gitweb.ps.run/ps-cgit/commitdiff_plain/288d502b3d8e7fa916104b486bbb146521e5c716?hp=02a545e63454530c1639014d3239c14ced2022c6 Merge branch 'lh/clone' * lh/clone: Add support for cloning over http Conflicts: cmd.c --- diff --git a/Makefile b/Makefile index 78aad10..b002d44 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ CGIT_SCRIPT_PATH = /var/www/htdocs/cgit CGIT_CONFIG = /etc/cgitrc CACHE_ROOT = /var/cache/cgit SHA1_HEADER = -GIT_VER = 1.5.6 +GIT_VER = 1.6.0.rc1 GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 # @@ -55,6 +55,7 @@ OBJECTS += configfile.o OBJECTS += html.o OBJECTS += parsing.o OBJECTS += shared.o +OBJECTS += ui-atom.o OBJECTS += ui-blob.o OBJECTS += ui-clone.o OBJECTS += ui-commit.o @@ -74,7 +75,7 @@ ifdef NEEDS_LIBICONV endif -.PHONY: all git test install uninstall clean force-version get-git +.PHONY: all libgit test install uninstall clean force-version get-git all: cgit @@ -91,17 +92,15 @@ CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' -cgit: $(OBJECTS) git/libgit.a git/xdiff/lib.a +cgit: $(OBJECTS) libgit $(QUIET_CC)$(CC) $(CFLAGS) -o cgit $(OBJECTS) $(EXTLIBS) cgit.o: VERSION -include $(OBJECTS:.o=.d) -git/libgit.a: git +libgit: $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) libgit.a - -git/xdiff/lib.a: git $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) xdiff/lib.a test: all diff --git a/cache.c b/cache.c index 9f02cf5..57068a1 100644 --- a/cache.c +++ b/cache.c @@ -416,7 +416,7 @@ int cache_ls(const char *path) fullname, strerror(err), err); continue; } - printf("%s %s %10lld %s\n", + printf("%s %s %10zd %s\n", name, sprintftime("%Y-%m-%d %H:%M:%S", slot.cache_st.st_mtime), diff --git a/cgit.h b/cgit.h index b01fa31..a1fa841 100644 --- a/cgit.h +++ b/cgit.h @@ -24,6 +24,7 @@ */ #define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" #define FMT_SHORTDATE "%Y-%m-%d" +#define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" /* diff --git a/cgitrc b/cgitrc index 9e8a0f2..6a79c43 100644 --- a/cgitrc +++ b/cgitrc @@ -44,6 +44,8 @@ ## print all tags. #summary-tags=0 +## Enable/disable display of localtime vs. GMT. Set to 1 for localtime. +#local-time=0 ## The "Idle" column on the repository index page can read a timestamp ## from the specified agefile (if this file cannot be found, the mtime diff --git a/cmd.c b/cmd.c index 03e165c..40ac53e 100644 --- a/cmd.c +++ b/cmd.c @@ -10,6 +10,7 @@ #include "cmd.h" #include "cache.h" #include "ui-shared.h" +#include "ui-atom.h" #include "ui-blob.h" #include "ui-clone.h" #include "ui-commit.h" @@ -28,6 +29,11 @@ static void HEAD_fn(struct cgit_context *ctx) cgit_clone_head(ctx); } +static void atom_fn(struct cgit_context *ctx) +{ + cgit_print_atom(ctx->qry.head, ctx->qry.path, 10); +} + static void about_fn(struct cgit_context *ctx) { if (ctx->repo) @@ -119,6 +125,7 @@ struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) { static struct cgit_cmd cmds[] = { def_cmd(HEAD, 1, 0), + def_cmd(atom, 1, 0), def_cmd(about, 0, 1), def_cmd(blob, 1, 0), def_cmd(commit, 1, 1), diff --git a/git b/git index 93310a4..8e1db38 160000 --- a/git +++ b/git @@ -1 +1 @@ -Subproject commit 93310a40eb022a0e36e7c618921931d8ffc31fd1 +Subproject commit 8e1db3871c767cb17b5e0eeb7bea8d967821a055 diff --git a/ui-atom.c b/ui-atom.c new file mode 100644 index 0000000..a6ea3ee --- /dev/null +++ b/ui-atom.c @@ -0,0 +1,129 @@ +/* ui-atom.c: functions for atom feeds + * + * Copyright (C) 2008 Lars Hjemli + * + * Licensed under GNU General Public License v2 + * (see COPYING for full license text) + */ + +#include "cgit.h" +#include "html.h" +#include "ui-shared.h" + +void add_entry(struct commit *commit, char *host) +{ + char delim = '&'; + char *hex; + char *mail, *t, *t2; + struct commitinfo *info; + + info = cgit_parse_commit(commit); + hex = sha1_to_hex(commit->object.sha1); + html("\n"); + html(""); + html_txt(info->subject); + html("\n"); + html(""); + cgit_print_date(info->author_date, FMT_ATOMDATE, ctx.cfg.local_time); + html("\n"); + html("\n"); + if (info->author) { + html(""); + html_txt(info->author); + html("\n"); + } + if (info->author_email) { + mail = xstrdup(info->author_email); + t = strchr(mail, '<'); + if (t) + t++; + else + t = mail; + t2 = strchr(t, '>'); + if (t2) + *t2 = '\0'; + html(""); + html_txt(t); + html("\n"); + free(mail); + } + html("\n"); + html(""); + cgit_print_date(info->author_date, FMT_ATOMDATE, ctx.cfg.local_time); + html("\n"); + if (host) { + html("\n"); + } + htmlf("%s\n", hex); + html("\n"); + html_txt(info->msg); + html("\n"); + html("\n"); + html("
\n"); + html("
\n");
+	html_txt(info->msg);
+	html("
\n"); + html("
\n"); + html("
\n"); + html("
\n"); + cgit_free_commitinfo(info); +} + + +void cgit_print_atom(char *tip, char *path, int max_count) +{ + char *host; + const char *argv[] = {NULL, tip, NULL, NULL, NULL}; + struct commit *commit; + struct rev_info rev; + int argc = 2; + + if (!tip) + argv[1] = ctx.qry.head; + + if (path) { + argv[argc++] = "--"; + argv[argc++] = path; + } + + init_revisions(&rev, NULL); + rev.abbrev = DEFAULT_ABBREV; + rev.commit_format = CMIT_FMT_DEFAULT; + rev.verbose_header = 1; + rev.show_root_diff = 0; + rev.max_count = max_count; + setup_revisions(argc, argv, &rev, NULL); + prepare_revision_walk(&rev); + + host = cgit_hosturl(); + ctx.page.mimetype = "text/xml"; + ctx.page.charset = "utf-8"; + cgit_print_http_headers(&ctx); + html("\n"); + html(""); + html_txt(ctx.repo->name); + html("\n"); + html(""); + html_txt(ctx.repo->desc); + html("\n"); + if (host) { + html("\n"); + } + while ((commit = get_revision(&rev)) != NULL) { + add_entry(commit, host); + free(commit->buffer); + commit->buffer = NULL; + free_commit_list(commit->parents); + commit->parents = NULL; + } + html("\n"); +} diff --git a/ui-atom.h b/ui-atom.h new file mode 100644 index 0000000..749ffd3 --- /dev/null +++ b/ui-atom.h @@ -0,0 +1,6 @@ +#ifndef UI_ATOM_H +#define UI_ATOM_H + +extern void cgit_print_atom(char *tip, char *path, int max_count); + +#endif diff --git a/ui-shared.c b/ui-shared.c index 197ee37..37c60b2 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -34,6 +34,21 @@ void cgit_print_error(char *msg) html("\n"); } +char *cgit_hosturl() +{ + char *host, *port; + + host = getenv("SERVER_NAME"); + if (!host) + return NULL; + port = getenv("SERVER_PORT"); + if (port && atoi(port) != 80) + host = xstrdup(fmt("%s:%d", host, atoi(port))); + else + host = xstrdup(host); + return host; +} + char *cgit_rooturl() { if (ctx.cfg.virtual_root) @@ -428,6 +443,7 @@ void cgit_print_http_headers(struct cgit_context *ctx) void cgit_print_docstart(struct cgit_context *ctx) { + char *host = cgit_hosturl(); html(cgit_doctype); html("\n"); html("\n"); @@ -445,6 +461,13 @@ void cgit_print_docstart(struct cgit_context *ctx) html_attr(ctx->cfg.favicon); html("'/>\n"); } + if (host && ctx->repo) { + html(""); + } html("\n"); html("\n"); } diff --git a/ui-shared.h b/ui-shared.h index 07da4b4..f4123d3 100644 --- a/ui-shared.h +++ b/ui-shared.h @@ -1,6 +1,7 @@ #ifndef UI_SHARED_H #define UI_SHARED_H +extern char *cgit_hosturl(); extern char *cgit_repourl(const char *reponame); extern char *cgit_fileurl(const char *reponame, const char *pagename, const char *filename, const char *query);