#!/usr/bin/perl -w

use Getopt::Long;

my @label = ();

GetOptions('label=s'=>\@label);

foreach my $dev (@ARGV) {
  my $label = shift @label;

  if (!-e $dev) {
    warn "$dev does not exist. Skipping\n";
    next;
  }
  if (!-b $dev) {
    warn "$dev does not seem top be a partition. Skipping\n";
    next;
  }

  # Try and get existing label

  my $oldlab = `e2label $dev`;
  if ($?) {
    $oldlab = `xfs_admin -l $dev`;
    if ($?) {
      $oldlab = undef;
    } else {
      ($oldlab) = $oldlab =~ /\"(.*)\"/;
    }
  } else {
    chomp $oldlab;
  }

  $oldlab = undef if ($oldlab eq '');
  $label = $oldlab if (!defined $label);

  if (!defined $oldlab) {
    printf "%10s not labelled\n", $dev;
    if ($label) {
      printf "%10s setting label to $label\n", ' ';
    } else {
      printf "%10s not setting label\n", ' ';
    }
  } else {
    if (!defined $label || $label eq $oldlab) {
      print "$dev labelled **$oldlab**\n";
    } else {
      printf "%10s was labelled $oldlab\n", $dev;
      printf "%10s setting label to $label\n", ' ';
    }
  }
  print "\n";

  my $label_command;
  if (defined $label) {
    $label_command = "-L \"$label\"";
  } else {
    $label_command = '';
  }

  #my $cmd = "mke2fs $dev -T largefile4 -m 0 -j  $label_command";
  my $cmd = "mkfs.xfs -f -l size=64m $label_command $dev";

  print "$cmd\n";
  system "$cmd";

  my $mntexisted = 1;
  if (!-e '/mnt') {
    mkdir '/mnt' || die "Could not create /mnt: $!\n";
    $mntexisted = 0;
  } else {
    if (!-e '/mnt') {
      mkdir '/mnt' || die "Could not create /mnt: $!\n";
    }
  }


  system "mount $dev /mnt";
  system "chown vlbi:vlbi /mnt";
  system "umount /mnt";


  if (!$mntexisted) {
    rmdir '/mnt' || die "Could not remove /mnt: $!\n";
  }
}
