X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/ee3047ee163d0ec2b0c416c2bb11f29ecb1b7552..0588f3b5c50e1d12ca2601173de72d76393216c2:/scripts/timestamp.pl

diff --git a/scripts/timestamp.pl b/scripts/timestamp.pl
index f6b06bc7f..e24d8149d 100755
--- a/scripts/timestamp.pl
+++ b/scripts/timestamp.pl
@@ -1,37 +1,66 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
+# 
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
 use strict;
 
-sub get_ts($) {
+sub get_ts($$) {
 	my $path = shift;
+	my $options = shift;
 	my $ts = 0;
-	open FIND, "find $path -not -path \\*.svn\\* -and -not -path \\*CVS\\* |";
+	my $fn = "";
+	$path .= "/" if( -d $path);
+	open FIND, "find $path -type f -and -not -path \\*/.svn\\* -and -not -path \\*CVS\\* $options 2>/dev/null |";
 	while (<FIND>) {
-		open FILE, "<$_";
-		my @stat = stat FILE;
-		close FILE;
-		$ts = $stat[9] if ($stat[9] > $ts);
+		chomp;
+		my $file = $_;
+		next if -l $file;
+		my $mt = (stat $file)[9];
+		if ($mt > $ts) {
+			$ts = $mt;
+			$fn = $file;
+		}
 	}
 	close FIND;
-	return $ts;
+	return ($ts, $fn);
 }
 
 (@ARGV > 0) or push @ARGV, ".";
 my $ts = 0;
 my $n = ".";
 my %options;
-foreach my $path (@ARGV) {
-	if ($path =~ /^-/) {
+while (@ARGV > 0) {
+	my $path = shift @ARGV;
+	if ($path =~ /^-x/) {
+		my $str = shift @ARGV;
+		$options{"findopts"} .= " -and -not -path '".$str."'"
+	} elsif ($path =~ /^-f/) {
+		$options{"findopts"} .= " -follow";
+	} elsif ($path =~ /^-n/) {
+		my $arg = $ARGV[0];
+		$options{$path} = $arg;
+	} elsif ($path =~ /^-/) {
 		$options{$path} = 1;
 	} else {
-		my $tmp = get_ts($path);
+		my ($tmp, $fname) = get_ts($path, $options{"findopts"});
 		if ($tmp > $ts) {
-			$n = $path;
+			if ($options{'-F'}) {
+				$n = $fname;
+			} else {
+				$n = $path;
+			}
 			$ts = $tmp;
 		}
 	}
 }
 
-if ($options{"-p"}) {
+if ($options{"-n"}) {
+	exit ($n eq $options{"-n"} ? 0 : 1);
+} elsif ($options{"-p"}) {
 	print "$n\n";
 } elsif ($options{"-t"}) {
 	print "$ts\n";