#!/usr/bin/perl

use MDK::Common;

my $prefix = '/tmp/live_tree';

sub create_light_tree {
    my ($live_name, $list) = @_;
    my $light_prefix = $prefix . '_' . $live_name;

    -e $light_prefix and die "you can't make_live_tree_boot since one already exists
Maybe you should remove it first with 'make_live_tree_boot -u'\n";

    foreach my $orig (@$list) {
	my $dest = $orig;
	$dest =~ s|^$prefix|$light_prefix|;

	my $link = $orig;
	$link =~ s|^$prefix|/image_$live_name|;

	mkdir_p(dirname($dest));
	rename $orig, $dest or die "moving $orig to $dest failed: $!\n";

	symlink $link, $orig or die "symlinking from $dest to $orig failed: $!\n";
    }
}

sub remove_light_tree {
    my ($live_name, $list) = @_;
    my $light_prefix = $prefix . '_' . $live_name;

    -d $light_prefix or return;

    foreach my $dest (@$list) {
	my $orig = $dest;
	$orig =~ s|^$prefix|$light_prefix|;

	next if !-e $orig;

	if (-e $dest && -s $dest != -s $orig) {
	    warn "ERROR: $dest already exist, skipping\n";
	} elsif (!-d $dest || -l $dest) {
	    unlink $dest or die "removing $dest failed: $!\n";
	    rename $orig, $dest or die "moving $orig to $dest failed: $!\n";
	}
    }
    rmdir($_) foreach reverse(chomp_(`find $light_prefix -type d`));

    if (-e $light_prefix) {
	print "still there:\n";
	system('find', $light_prefix);

	foreach my $dest (chomp_(`find $prefix -type l`)) {
	    my $orig = readlink($dest) or next;
	    $orig =~ s!/image_$live_name/!$light_prefix/! or next;

	    unlink $dest or die "removing $dest failed: $!\n";
	    rename $orig, $dest or die "moving $orig to $dest failed: $!\n";	    
	}
	rmdir($_) foreach reverse(chomp_(`find $light_prefix -type d`));
    }
    if (-e $light_prefix) {
	print "still there:\n";
	system('find', $light_prefix);
    }
}

my @always_list = chomp_(cat_('data/always.list'));
my @boot_list = chomp_(cat_('data/boot.list'));

@boot_list = difference2(\@boot_list, \@always_list);

remove_light_tree('always', \@always_list);
remove_light_tree('boot', \@boot_list);

if (!@ARGV) {
    create_light_tree('always', \@always_list);    
    create_light_tree('boot', \@boot_list);    
}