summaryrefslogtreecommitdiff
path: root/csvncgi/ui-log.c
diff options
context:
space:
mode:
Diffstat (limited to 'csvncgi/ui-log.c')
-rw-r--r--csvncgi/ui-log.c79
1 files changed, 69 insertions, 10 deletions
diff --git a/csvncgi/ui-log.c b/csvncgi/ui-log.c
index d0c17b6..a97dd06 100644
--- a/csvncgi/ui-log.c
+++ b/csvncgi/ui-log.c
@@ -167,11 +167,25 @@ static void xml_csvn_log( struct strbuf *sb, const struct strbuf *buf, const cha
strbuf_addf( sb, " <div class=\"col-cmsg\"><div onclick=\"trunc(this)\" class=\"log-cmsg trunc\">%s</div></div>\n", (char *)cmsg );
if( query_string && *query_string )
{
- strbuf_addf( sb, " <div class=\"col-rev\"><div onclick=\"trunc(this)\" class=\"log-rev trunc\"><a title=\"Compare with Previous\" href=\"/%s%s/?op=diff&rev=%s&%s\">%s</a></div></div>\n", ctx.repo.name, path, (char *)revision, query_string, (char *)revision );
+ if( ctx.repo.repo_root && *ctx.repo.repo_root )
+ {
+ strbuf_addf( sb, " <div class=\"col-rev\"><div onclick=\"trunc(this)\" class=\"log-rev trunc\"><a title=\"Compare with Previous\" href=\"/%s/%s%s/?op=diff&rev=%s&%s\">%s</a></div></div>\n", ctx.repo.repo_root, ctx.repo.name, path, (char *)revision, query_string, (char *)revision );
+ }
+ else
+ {
+ strbuf_addf( sb, " <div class=\"col-rev\"><div onclick=\"trunc(this)\" class=\"log-rev trunc\"><a title=\"Compare with Previous\" href=\"/%s%s/?op=diff&rev=%s&%s\">%s</a></div></div>\n", ctx.repo.name, path, (char *)revision, query_string, (char *)revision );
+ }
}
else
{
- strbuf_addf( sb, " <div class=\"col-rev\"><div onclick=\"trunc(this)\" class=\"log-rev trunc\"><a title=\"Compare with Previous\" href=\"/%s%s/?op=diff&rev=%s\">%s</a></div></div>\n", ctx.repo.name, path, (char *)revision, (char *)revision );
+ if( ctx.repo.repo_root && *ctx.repo.repo_root )
+ {
+ strbuf_addf( sb, " <div class=\"col-rev\"><div onclick=\"trunc(this)\" class=\"log-rev trunc\"><a title=\"Compare with Previous\" href=\"/%s/%s%s/?op=diff&rev=%s\">%s</a></div></div>\n", ctx.repo.repo_root, path, ctx.repo.name, path, (char *)revision, (char *)revision );
+ }
+ else
+ {
+ strbuf_addf( sb, " <div class=\"col-rev\"><div onclick=\"trunc(this)\" class=\"log-rev trunc\"><a title=\"Compare with Previous\" href=\"/%s%s/?op=diff&rev=%s\">%s</a></div></div>\n", ctx.repo.name, path, (char *)revision, (char *)revision );
+ }
}
strbuf_addf( sb, " <div class=\"col-author\"><div onclick=\"trunc(this)\" class=\"log-author trunc\">%s</div></div>\n", (char *)author );
strbuf_addf( sb, " </div>\n\n" );
@@ -215,9 +229,27 @@ static void xml_csvn_log( struct strbuf *sb, const struct strbuf *buf, const cha
if( prev < 0 ) prev = 0;
if( ctx.env.query_string && *ctx.env.query_string )
- strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d&%s\">&#x226a;&nbsp; Prev</a>\n", ctx.repo.name, path, prev, ctx.env.query_string );
+ {
+ if( ctx.repo.repo_root && *ctx.repo.repo_root )
+ {
+ strbuf_addf( sb, " <a href=\"/%s/%s%s/?ofs=%d&%s\">&#x226a;&nbsp; Prev</a>\n", ctx.repo.repo_root, ctx.repo.name, path, prev, ctx.env.query_string );
+ }
+ else
+ {
+ strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d&%s\">&#x226a;&nbsp; Prev</a>\n", ctx.repo.name, path, prev, ctx.env.query_string );
+ }
+ }
else
- strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">&#x226a;&nbsp; Prev</a>\n", ctx.repo.name, path, prev );
+ {
+ if( ctx.repo.repo_root && *ctx.repo.repo_root )
+ {
+ strbuf_addf( sb, " <a href=\"/%s/%s%s/?ofs=%d\">&#x226a;&nbsp; Prev</a>\n", ctx.repo.repo_root, ctx.repo.name, path, prev );
+ }
+ else
+ {
+ strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">&#x226a;&nbsp; Prev</a>\n", ctx.repo.name, path, prev );
+ }
+ }
}
strbuf_addf( sb, " </div>\n" );
@@ -230,9 +262,27 @@ static void xml_csvn_log( struct strbuf *sb, const struct strbuf *buf, const cha
next = ctx.query.ofs + page_size;
if( ctx.env.query_string && *ctx.env.query_string )
- strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d&%s\">Next &nbsp;&#x226b;</a>\n", ctx.repo.name, path, next, ctx.env.query_string );
+ {
+ if( ctx.repo.repo_root && *ctx.repo.repo_root )
+ {
+ strbuf_addf( sb, " <a href=\"/%s/%s%s/?ofs=%d&%s\">Next &nbsp;&#x226b;</a>\n", ctx.repo.repo_root, ctx.repo.name, path, next, ctx.env.query_string );
+ }
+ else
+ {
+ strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d&%s\">Next &nbsp;&#x226b;</a>\n", ctx.repo.name, path, next, ctx.env.query_string );
+ }
+ }
else
- strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">Next &nbsp;&#x226b;</a>\n", ctx.repo.name, path, next );
+ {
+ if( ctx.repo.repo_root && *ctx.repo.repo_root )
+ {
+ strbuf_addf( sb, " <a href=\"/%s/%s%s/?ofs=%d\">Next &nbsp;&#x226b;</a>\n", ctx.repo.repo_root, ctx.repo.name, path, next );
+ }
+ else
+ {
+ strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">Next &nbsp;&#x226b;</a>\n", ctx.repo.name, path, next );
+ }
+ }
}
strbuf_addf( sb, " </div>\n" );
@@ -254,7 +304,8 @@ static void xml_csvn_log( struct strbuf *sb, const struct strbuf *buf, const cha
static void csvn_print_log( struct strbuf *sb, const char *relative_path, int revision )
{
const char *co_prefix = ctx.repo.checkout_ro_prefix;
- const char *repo_path = ctx.repo.name;
+ const char *name = ctx.repo.name;
+ const char *repo_root = ctx.repo.repo_root;
char *path = NULL;
if( !sb ) return;
@@ -273,19 +324,27 @@ static void csvn_print_log( struct strbuf *sb, const char *relative_path, int re
if( co_prefix )
{
- char cmd[1024];
+ char repo_path[PATH_MAX] = { 0 };
+ char cmd[PATH_MAX];
struct strbuf buf = STRBUF_INIT;
pid_t p = (pid_t) -1;
int rc;
+ if( repo_root && *repo_root )
+ {
+ strcat( (char *)&repo_path[0], repo_root );
+ strcat( (char *)&repo_path[0], "/" );
+ }
+ strcat( (char *)&repo_path[0], name );
+
if( revision )
snprintf( (char *)&cmd[0], 1024,
"svn log --revision %d:0 --xml %s/%s%s 2>/dev/null",
- revision, co_prefix, repo_path, path );
+ revision, co_prefix, (char *)&repo_path[0], path );
else
snprintf( (char *)&cmd[0], 1024,
"svn log --xml %s/%s%s 2>/dev/null",
- co_prefix, repo_path, path );
+ co_prefix, (char *)&repo_path[0], path );
p = sys_exec_command( &buf, cmd );
rc = sys_wait_command( p, NULL );
if( rc != 0 )