aboutsummaryrefslogtreecommitdiff
path: root/bin/copyright.awk
diff options
context:
space:
mode:
Diffstat (limited to 'bin/copyright.awk')
-rwxr-xr-xbin/copyright.awk122
1 files changed, 0 insertions, 122 deletions
diff --git a/bin/copyright.awk b/bin/copyright.awk
deleted file mode 100755
index 371a9c2..0000000
--- a/bin/copyright.awk
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/gawk -f
-# Copyright (C) 2013 Ryan Kavanagh <rak@debian.org>
-# Given a series of lines in the format
-# Copyright (c) NNNN, MMMM-MMMM, ..., NNNN John Smith <jsmith@example.org>
-# group years and emails by person.
-
-{
- match($0, /.*Copyright.*[0-9][,]? +/);
- DATE_LENGTH = RLENGTH;
- match($0, /<.*>/);
- EMAIL_START = RSTART;
- if (RLENGTH != -1) {
- NAME = substr($0, DATE_LENGTH + 1, EMAIL_START - DATE_LENGTH - 2);
- EMAIL = substr($0, EMAIL_START);
- } else {
- # No email on this line
- NAME = substr($0, DATE_LENGTH + 1);
- }
- match($0, /.*Copyright +\([cC]\) +/);
- DATE_START = RLENGTH + 1;
- YEARS = substr($0, DATE_START, DATE_LENGTH - DATE_START);
- gsub(/, +/, " ", YEARS);
- gsub(/,/, " ", YEARS);
- people_years[NAME] = people_years[NAME] " " YEARS;
- if (EMAIL_LENGTH != -1) {
- email_pattern = "/.*" EMAIL ".*/";
- if (!(NAME in people_emails)) {
- people_emails[NAME] = EMAIL;
- } else if (!match(people_emails[NAME], EMAIL)) {
- people_emails[NAME] = people_emails[NAME] "," EMAIL;
- }
- }
-} END {
- for (person in people_years) {
- delete years_array;
- split(people_years[person], years_array);
- # Split any hyphenated years;
- for (year in years_array) {
- if (years_array[year] ~ /[0-9]+-[0-9]+/) {
- delete split_year;
- split(years_array[year], split_year, /-/);
- years_array[year] = split_year[1];
- if (split_year[1] != split_year[2]) {
- # Make sure it isn't some crappy input like 2012-2012
- for (j = 1; j <= split_year[2] - split_year[1]; j++) {
- years_array[length(years_array) + 1] = \
- years_array[year] + j;
- }
- }
- }
- }
- # Sort the years
- asort(years_array);
- # Delete any duplicates:
- for (i = 1; i <= length(years_array); i++) {
- if (i > 1 && years_array[i-1] == years_array[i]) {
- # Delete years_array[i-1] instead of years_array[i] so that we
- # can still check the next year with ease
- delete years_array[i-1];
- }
- }
- # Final sort
- asort(years_array);
- # Remove duplicates and generate year string
- year_string = "";
- # Force AWK to access the years in order
- added_hyphen = 0;
- for (i = 1; i <= length(years_array); i++) {
- if (i > 1) {
- if (years_array[i - 1] != years_array[i]) {
- # added_hyphen tracks if the last character in the string is
- # a hyphen
- if ((!added_hyphen) && (years_array[i - 1] == years_array[i] - 1)) {
- # year_string isn't terminated by a hyphen, and the year
- # at i-1 is one less than the current one
- year_string = year_string "-";
- added_hyphen = 1;
- } else if (added_hyphen && (years_array[i - 1] != years_array[i] - 1)) {
- # The string is terminated by a hyphen, but the current
- # year does not immediately follow the preceeding
- # one
- year_string = year_string years_array[i-1] ", " years_array[i];
- added_hyphen = 0;
- } else if (!added_hyphen) {
- year_string = year_string ", " years_array[i];
- }
- }
- } else {
- year_string = years_array[i];
- }
- }
- # We've added a hyphen, but run out of years to check, terminate it
- if (added_hyphen) {
- year_string = year_string years_array[length(years_array)];
- }
- final_line[years_array[length(years_array)]][length(years_array)][person] = \
- "Copyright (C) " year_string "\t" person " " people_emails[person];
- }
- # We can't sort the years indices with asorti because we want a numerical,
- # not lexicographic sort of the indices.
- j = 0;
- delete years_sorted;
- for (i in final_line) years_sorted[j++] = i+0;
- n_years_entries = asort(years_sorted);
- # And output the lines with the most recent contributor first
- for (y = n_years_entries; y >= 1; y--) {
- # Sort the contributors with most recent contribution in year
- # by_year[y] by number of years contributed:
- j = 0;
- delete contributions_sorted;
- for (i in final_line[years_sorted[y]]) contributions_sorted[j++] = i+0;
- n_contrib_entries = asort(contributions_sorted);
- for (c = n_contrib_entries; c >= 1; c--) {
- # Finally, sort by contributor name
- asorti(final_line[years_sorted[y]][contributions_sorted[c]], by_person);
- # And output the lines in alphabetical order by person name
- for (n = 1; n <= length(by_person); n++) {
- print final_line[years_sorted[y]][contributions_sorted[c]][by_person[n]];
- }
- }
- }
-}