diff options
Diffstat (limited to 'csvncgi/ui-log.c')
-rw-r--r-- | csvncgi/ui-log.c | 79 |
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\">≪ 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\">≪ 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\">≪ Prev</a>\n", ctx.repo.name, path, prev, ctx.env.query_string ); + } + } else - strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">≪ 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\">≪ Prev</a>\n", ctx.repo.repo_root, ctx.repo.name, path, prev ); + } + else + { + strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">≪ 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 ≫</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 ≫</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 ≫</a>\n", ctx.repo.name, path, next, ctx.env.query_string ); + } + } else - strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">Next ≫</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 ≫</a>\n", ctx.repo.repo_root, ctx.repo.name, path, next ); + } + else + { + strbuf_addf( sb, " <a href=\"/%s%s/?ofs=%d\">Next ≫</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 ) |