Exemple #1
0
void cgit_print_repo_readme(char *path)
{
	char *filename, *ref;
	int free_filename = 0;

	if (ctx.repo->readme.nr == 0)
		return;

	filename = ctx.repo->readme.items[0].string;
	ref = ctx.repo->readme.items[0].util;

	if (path) {
		free_filename = 1;
		filename = append_readme_path(filename, ref, path);
		if (!filename)
			return;
	}

	/* Print the calculated readme, either from the git repo or from the
	 * filesystem, while applying the about-filter.
	 */
	html("<div id='summary'>");
	cgit_open_filter(ctx.repo->about_filter, filename);
	if (ref)
		cgit_print_file(filename, ref, 1);
	else
		html_include(filename);
	cgit_close_filter(ctx.repo->about_filter);

	html("</div>");
	if (free_filename)
		free(filename);
}
Exemple #2
0
void cgit_print_repo_readme(char *path)
{
	char *slash, *tmp, *colon, *ref;

	if (!ctx.repo->readme || !(*ctx.repo->readme))
		return;

	ref = NULL;

	/* Check if the readme is tracked in the git repo. */
	colon = strchr(ctx.repo->readme, ':');
	if (colon && strlen(colon) > 1) {
		*colon = '\0';
		ref = ctx.repo->readme;
		ctx.repo->readme = colon + 1;
		if (!(*ctx.repo->readme))
			return;
	}

	/* Prepend repo path to relative readme path unless tracked. */
	if (!ref && *ctx.repo->readme != '/')
		ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path,
					       ctx.repo->readme));

	/* If a subpath is specified for the about page, make it relative
	 * to the directory containing the configured readme.
	 */
	if (path) {
		slash = strrchr(ctx.repo->readme, '/');
		if (!slash) {
			if (!colon)
				return;
			slash = colon;
		}
		tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1);
		strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1);
		strcpy(tmp + (slash - ctx.repo->readme + 1), path);
	} else
		tmp = ctx.repo->readme;

	/* Print the calculated readme, either from the git repo or from the
	 * filesystem, while applying the about-filter.
	 */
	html("<div id='summary'>");
	if (ctx.repo->about_filter)
		cgit_open_filter(ctx.repo->about_filter);
	if (ref)
		cgit_print_file(tmp, ref);
	else
		html_include(tmp);
	if (ctx.repo->about_filter)
		cgit_close_filter(ctx.repo->about_filter);
	html("</div>");
}