diff options
Diffstat (limited to 'csvncgi/ui-blame.c')
-rw-r--r-- | csvncgi/ui-blame.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/csvncgi/ui-blame.c b/csvncgi/ui-blame.c index 15fff42..ddd37cb 100644 --- a/csvncgi/ui-blame.c +++ b/csvncgi/ui-blame.c @@ -53,7 +53,8 @@ static void csvn_print_blame( 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; if( !sb || !relative_path ) return; @@ -62,20 +63,28 @@ static void csvn_print_blame( struct strbuf *sb, const char *relative_path, int if( co_prefix ) { - char cmd[1024]; + char repo_path[PATH_MAX] = { 0 }; + char cmd[PATH_MAX]; struct strbuf buf = STRBUF_INIT; char *raw = NULL; 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 blame --revision %d %s/%s/%s 2>/dev/null", - revision, co_prefix, repo_path, relative_path ); + revision, co_prefix, (char *)&repo_path[0], relative_path ); else snprintf( (char *)&cmd[0], 1024, "svn blame %s/%s/%s 2>/dev/null", - co_prefix, repo_path, relative_path ); + co_prefix, (char *)&repo_path[0], relative_path ); p = sys_exec_command( &buf, cmd ); rc = sys_wait_command( p, NULL ); if( rc != 0 ) |