diff options
| author | Michael Krelin <hacker@klever.net> | 2007-07-21 15:24:07 +0200 | 
|---|---|---|
| committer | Michael Krelin <hacker@klever.net> | 2007-07-21 15:24:07 +0200 | 
| commit | 1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3 (patch) | |
| tree | 471330d2f6ead56437bca3698329792a23ce1334 | |
| parent | added snapshot filename to the link (diff) | |
| download | cgit-1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3.tar.gz cgit-1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3.tar.bz2 cgit-1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3.zip | |
introduce cgit_repobasename
 that shortens reponame stripping any directories and .git suffixes, that is
 turning 'dir/repo.git/' or 'dir/repo/.git/' or alikes into mere 'repo'.
Signed-off-by: Michael Krelin <hacker@klever.net>
| -rw-r--r-- | cgit.h | 2 | ||||
| -rw-r--r-- | ui-shared.c | 24 | 
2 files changed, 26 insertions, 0 deletions
| @@ -206,6 +206,8 @@ extern char *cgit_fileurl(const char *reponame, const char *pagename,  extern char *cgit_pageurl(const char *reponame, const char *pagename,  			  const char *query); +extern const char *cgit_repobasename(const char *reponame); +  extern void cgit_tree_link(char *name, char *title, char *class, char *head,  			   char *rev, char *path);  extern void cgit_log_link(char *name, char *title, char *class, char *head, diff --git a/ui-shared.c b/ui-shared.c index 1c1415e..3e378a4 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -81,6 +81,30 @@ char *cgit_pageurl(const char *reponame, const char *pagename,  	return cgit_fileurl(reponame,pagename,0,query);  } +const char *cgit_repobasename(const char *reponame) +{ +	/* I assume we don't need to store more than one repo basename */ +	static char rvbuf[1024]; +	int p; +	const char *rv; +	strncpy(rvbuf,reponame,sizeof(rvbuf)); +	if(rvbuf[sizeof(rvbuf)-1]) +		die("cgit_repobasename: truncated repository name '%s'", reponame); +	p = strlen(rvbuf)-1; +	/* strip trailing slashes */ +	while(p && rvbuf[p]=='/') rvbuf[p--]=0; +	/* strip trailing .git */ +	if(p>=3 && !strncmp(&rvbuf[p-3],".git",4)) { +		p -= 3; rvbuf[p--] = 0; +	} +	/* strip more trailing slashes if any */ +	while( p && rvbuf[p]=='/') rvbuf[p--]=0; +	/* find last slash in the remaining string */ +	rv = strrchr(rvbuf,'/'); +	if(rv) +		return ++rv; +	return rvbuf; +}  char *cgit_currurl()  { |