/* ui-tree.c: functions for tree output
 *
 * Copyright (C) 2006 Lars Hjemli
 *
 * Licensed under GNU General Public License v2
 *   (see COPYING for full license text)
 */
#include "cgit.h"
static int print_entry(const unsigned char *sha1, const char *base, 
		       int baselen, const char *pathname, unsigned int mode, 
		       int stage)
{
	char *name;
	enum object_type type;
	unsigned long size = 0;
	name = xstrdup(pathname);
	type = sha1_object_info(sha1, &size);
	if (type == OBJ_BAD && !S_ISDIRLNK(mode)) {
		htmlf("
| Bad object: %s %s | 
",
		      name,
		      sha1_to_hex(sha1));
		return 0;
	}
	html("| ");
	html_filemode(mode);
	html(" | %s", name);
	htmlf(" | %li", size);
	html(" | 
\n");
	free(name);
	return 0;
}
void cgit_print_tree(const char *hex, char *path)
{
	struct tree *tree;
	unsigned char sha1[20];
	if (get_sha1_hex(hex, sha1)) {
		cgit_print_error(fmt("Invalid object id: %s", hex));
		return;
	}
	tree = parse_tree_indirect(sha1);
	if (!tree) {
		cgit_print_error(fmt("Not a tree object: %s", hex));
		return;
	}
	html_txt(path);
	html("\n");
	html("");
	html("| Mode");
	html(" | Name");
	html(" | Size");
	html(" | 
\n");
	read_tree_recursive(tree, "", 0, 1, NULL, print_entry);
	html("
\n");
}