#!/usr/bin/perl
# -*- tab-width: 4 -*-"

use strict;
use lib 'lib';

use Fcntl;
use Getopt::Long;

use LXR::Files;
use LXR::Index;
use LXR::Config;
use LXR::Tagger;
use LXR::Common;



my %option;
GetOptions(\%option, "url=s", "version=s", "allurls!", "allversions!");

die("URL must be specified.\n") 
	unless $option{'url'};

die("Version must be specified.\n") 
	unless $option{'version'} || $option{'allversions'};

$config = new LXR::Config($option{'url'});

die("No matching configuration") unless $config->sourceroot;

$files = new LXR::Files($config->sourceroot);
$index = new LXR::Index($config->dbname, O_RDWR|O_CREAT);

genindex('/', $option{'version'});
genrefs('/', $option{'version'});

sub genindex {
	my ($pathname, $release) = @_;

	print(STDERR "*** $pathname $release \n");

	if ($pathname =~ m|/$|) {
		map { 
			genindex($pathname.$_, $release) 
			} $files->getdir($pathname, $release);
	} else {
		my @releases = ($release 
						? ($release)
						: $files->allreleases($pathname));
		
		map {
			&LXR::Tagger::processfile($pathname, $_,
									  $config, $files, $index)
			} @releases;
	}
}

sub genrefs {
	my ($pathname, $release) = @_;

	print(STDERR "### $pathname $release \n");

	if ($pathname =~ m|/$|) {
		map {
			genrefs($pathname.$_, $release)
			} $files->getdir($pathname, $release);
	}
	else {
		my @releases = ($release 
						? ($release)
						: $files->allreleases($pathname));

		map {
			&LXR::Tagger::processrefs($pathname, $_,
									  $config, $files, $index)
			} @releases;
	}
}




