Upgrade releasetools/sort_set
- retire the old shell script - import perl script The perl scripts has the following advantages: - The sorting should be more stable, even accross different OSes. - The sorted output is automatically formatted into columns - It is much faster, even on large inputs. Change-Id: I1068b21fda981b4cf9eeea4af83165ec2968280b
This commit is contained in:
parent
69eead77ff
commit
240e6259de
2 changed files with 71 additions and 26 deletions
71
releasetools/sort_set.pl
Executable file
71
releasetools/sort_set.pl
Executable file
|
@ -0,0 +1,71 @@
|
||||||
|
#!/usr/bin/perl -T -t -w -W
|
||||||
|
|
||||||
|
# Sort each line of the input, ignoring any line beginning with a #.
|
||||||
|
# Also format the output so that it is properly aligned, with exceptions
|
||||||
|
# for values which are too long for their respective field.
|
||||||
|
|
||||||
|
print <<HEADER;
|
||||||
|
#
|
||||||
|
# Sorted using sort_set.pl in releasetools.
|
||||||
|
# to add an entry simply add it at the end of the
|
||||||
|
# file and run
|
||||||
|
# ../../../../releasetools/sort_set.pl < mi > out
|
||||||
|
# mv out mi
|
||||||
|
#
|
||||||
|
HEADER
|
||||||
|
|
||||||
|
while(<STDIN>) {
|
||||||
|
# Ignore any line starting with a '#'
|
||||||
|
if ($_ =~ m/#.*/) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Entry with a condition field, one or more whitespace characters
|
||||||
|
# separate each column. Example:
|
||||||
|
# ./etc/X11 minix-base xorg
|
||||||
|
if ($_ =~ m/(\S+)\s+(\S+)\s+(\S+)/) {
|
||||||
|
my ($f, $s, $c) = ($1, $2, $3);
|
||||||
|
$k = "$f.$c";
|
||||||
|
$files{$k} = $f;
|
||||||
|
$sets{$k} = $s;
|
||||||
|
$conditions{$k} = $c;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Entry without a condition field. Example:
|
||||||
|
# ./bin minix-base
|
||||||
|
if ($_ =~ m/(\S+)\s+(\S+)/) {
|
||||||
|
my ($f, $s) = ($1, $2);
|
||||||
|
$k = "$f.";
|
||||||
|
$files{$k} = $f;
|
||||||
|
$sets{$k} = $s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sort by file/directory name.
|
||||||
|
foreach $key (sort keys %sets) {
|
||||||
|
$file = $files{$key};
|
||||||
|
$set = $sets{$key};
|
||||||
|
|
||||||
|
if (length($file) < 56) {
|
||||||
|
printf("%-55s ", $file);
|
||||||
|
} else {
|
||||||
|
printf("%s ", $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
$last = $set;
|
||||||
|
if (exists($conditions{$key})) {
|
||||||
|
# A condition is present, so make sure it is printed with
|
||||||
|
# the required alignment, by adding the necessary padding
|
||||||
|
# after the set column. Otherwise do not add trailing
|
||||||
|
# spaces.
|
||||||
|
$last = $conditions{$key};
|
||||||
|
if (length($set) < 16) {
|
||||||
|
printf("%-15s ", $set);
|
||||||
|
} else {
|
||||||
|
printf("%s ", $set);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%s\n", $last);
|
||||||
|
}
|
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# kinda natural sorting for sets
|
|
||||||
# prepend every line with a modified path where
|
|
||||||
# slashes are replaced by "1" and "0" is added
|
|
||||||
# at the end of the string.
|
|
||||||
#
|
|
||||||
# entry
|
|
||||||
# ./bin/cat minix-sys
|
|
||||||
# becomes
|
|
||||||
#.1bin1cat0 ./bin/cat minix-sys
|
|
||||||
#
|
|
||||||
# This entry gets sorted after wich the key is removed using
|
|
||||||
# cut
|
|
||||||
#
|
|
||||||
# Additionally all lines starting with "#" are put on
|
|
||||||
# top in the order they where put in the file. this is done
|
|
||||||
# by creating a "key" with the value COUNTER
|
|
||||||
#
|
|
||||||
COUNTER=10000
|
|
||||||
while read i
|
|
||||||
do
|
|
||||||
A=$(echo $i | cut -f 1 -d ' ' | sed "s,^#,00$COUNTER,g" | sed 's,/,1,g' )
|
|
||||||
echo "${A}0 $i"
|
|
||||||
COUNTER=$(($COUNTER +1))
|
|
||||||
done | sort | cut -d ' ' -f 2-
|
|
Loading…
Reference in a new issue