3 # A script checking the git logs for commits. Final goal is updating AUTHORS.
4 # Run it in source root
6 # To be copied and run in the git directory for having "git shortlog -sn po/" find the logs.
7 # It will generate a subdirectory temp_update_AUTHORS
9 OLD_AUTHORS
="AUTHORS_unmodified_by_No_se_script.txt"
10 # The last version before modifying AUTHORS with this kind of script. Important, since the script shall not remove anyone.
11 # Not even the manual editings delete anyone.
12 # 4f696a88ec9544b98e22ee45e010869717608bd2 here did j-b start using the script
14 if [ -f $OLD_AUTHORS ]; then
15 echo "Starting with credits from $OLD_AUTHORS ..."
17 echo "You need an old AUTHORS file. Only if you know what you are doing, you can use the current AUTHORS."
23 mkdir
-p temp_update_AUTHORS
25 echo "Checking all git logs"
26 git shortlog
-sn -- > temp_update_AUTHORS
/all_git.txt
28 echo "Checking "po only
" git logs"
29 #git shortlog -sn po/ > temp_update_AUTHORS/po_git.txt
30 # This modified command identified more translators, leading to the removal of existing entries in AUTHORS, impossible by design.
31 # So, start with a AUTHORS version with validated entries.
32 # Only if the script is not modified (wrt finding translators) you can use the current AUTHORS
33 git shortlog
-sn -- po extras
/package
/win32
/languages
/ share
/vlc.desktop.
in share
/vlc.desktop
share
/applications
/vlc.desktop extras
/package
/win32
/vlc.win32.nsi.
in > temp_update_AUTHORS
/po_git_previous.txt
35 # Some typical (ancient) l10n files:
36 #share/applications/vlc.desktop
37 #extras/package/win32/languages/declaration.nsh
38 #extras/package/win32/languages/english.nsh
39 #extras/package/win32/languages/french.nsh
40 #extras/package/win32/vlc.win32.nsi.in
44 s/.*Florian Hubold.*//
45 s/.*Sveinung Kvilhaugsvik.*//
46 s/.*Julien Humbert.*//
49 ' <temp_update_AUTHORS
/po_git_previous.txt
>temp_update_AUTHORS
/po_git.txt
51 # Checking the logs, this ^^ persons did not do l10n
52 # commited to share/vlc.desktop, but this seems to be media types, not l10n things.
54 # share/applications/vlc.desktop
55 # Sveinung Kvilhaugsvik
56 # commited to extras/package/win32/vlc.win32.nsi.in and include/vlc_interface.h
58 # comitted to po/POTFILES.in
61 # TODO: add this newly discovered translators
63 # Radek Vybiral <radek@ns.snake.cz>
65 # Thanks to Hsi-Ching Chao
66 # Thanks to Ruei-Yuan Lu <RueiYuan.Lu@gmail.com>
67 #extras/package/win32/languages/schinese.nsh
71 # there are some artwork designers in git log, too. If one of them wants to be mentioned in "Programmers" also, remove here:
72 echo "Damien Erambert" > temp_update_AUTHORS
/artwork_git.txt
73 echo "Daniel Dreibrodt" >> temp_update_AUTHORS
/artwork_git.txt
74 echo "Dominic Spitaler" >> temp_update_AUTHORS
/artwork_git.txt
79 echo "reading AUTHORS"
80 sed -n '/Programming/,/^$/ s/[^-].*/&/p' < $OLD_AUTHORS |
sed '1 d' > temp_update_AUTHORS
/programmers_part.txt
81 # The part of AUTHORS between Programming and the first empty line, without the ---- line
84 echo "Removing commit counts from git log"
85 sed 's/[0-9 \t]*\(.*\)/\1/g' < temp_update_AUTHORS
/all_git.txt |
sort|
uniq > temp_update_AUTHORS
/all_git_namesonly.txt
86 # I think "uniq" is not needed here.
89 echo "Removing translators from the git log"
90 # Remove translators. (Commiters with the same count in /po and total and hence are listed twice). Then the commit counter is removed
91 cat temp_update_AUTHORS
/all_git.txt temp_update_AUTHORS
/po_git.txt|
sort|
uniq -u |
sed 's/[0-9 \t]*\(.*\)/\1/g' |
sort|
uniq> temp_update_AUTHORS
/coders_only.txt
95 #For script tuning: Are there other files the translators modified? =>probably l10n files
96 cat temp_update_AUTHORS
/all_git.txt temp_update_AUTHORS
/po_git.txt|
sort|
uniq -u|
sed 's/[0-9 \t]*\(.*\)/\1/g' |
sort|
uniq -d> temp_update_AUTHORS
/both_sides.txt
99 # Similar effect with second sed run:
100 # Remove translators. I remove every line containing the name. Maybe the .* before and after the last \1 should be removed (i.e. for contributors "Firstname Secondname aka something_you_want_to_keep"
101 #cat temp_update_AUTHORS/all_git.txt temp_update_AUTHORS/po_git.txt|sort|uniq -D|uniq|sed 's/[0-9 \t]*\(.*\)/\1/g' |sed 's:[0-9 \t]*\(.*\):s^.*\1.*^^g:' > temp_update_AUTHORS/remove_translators_gen
103 #sed -f temp_update_AUTHORS/remove_translators_gen < temp_update_AUTHORS/all_git_namesonly.txt > temp_update_AUTHORS/coders_only.txt
104 # This is everyone who did code commits with git. The blank lines are the removed translators.
107 # Now, I want to reduce the number of lines the human reader has to check, so we are going to kill the already listed contributors.
109 echo "Finding pre-git contributors in AUTHORS"
110 sed 's:\(.*\):s^.*\1.*^^g:' < temp_update_AUTHORS
/coders_only.txt
> temp_update_AUTHORS
/remove_git_commiters_gen
111 sed -f temp_update_AUTHORS
/remove_git_commiters_gen
< temp_update_AUTHORS
/programmers_part.txt |
sort|
uniq -u > temp_update_AUTHORS
/pre-git.txt
113 sed 's:\(.*\):s^.*\1.*^^g:' < temp_update_AUTHORS
/programmers_part.txt
> temp_update_AUTHORS
/remove_programmers_part_gen
114 sed -f temp_update_AUTHORS
/remove_programmers_part_gen
< temp_update_AUTHORS
/coders_only.txt |
sort|
uniq -u > temp_update_AUTHORS
/new_coders_only.txt
116 # VideoLAN as a contributor can be removed, I think
120 sed 's/[0-9 \t]*\(.*\)/\1/g' < temp_update_AUTHORS
/all_git.txt
> temp_update_AUTHORS
/all_git_namesonly_ordered.txt
121 # Just remove the tab an the # commits, keep the order. This file is going to be the sort order.
122 # You can re-order the complete programmers part like that and simply append the pre-git commiters.
123 # Ordering the contributors that way is not a bad idea.
124 # The question: Is it easier/better to check the new commiters in this order?
125 # One can find (UPPERCASE issues, middle names,..) better when listing them alphabetically.
127 # I suggest checking manually a file build like that:
128 # alphabetically ordered, complete list of contributors/git (code) commiters, with an extra marking for new ones. Example
130 # New Commiter ---XXX---NEW
131 # New COMMITER ---XXX---NEW |same name with UPPERCASE part
133 # Very New Commiter ---XXX---NEW |Same person with a middle name
135 # The uppercase case can be done by script I guess, I did not look up how to make sure the intended version will be picked.
136 # How to proceed with manually found problems? Solve them for the future (.mailmap/own script/...)
138 rm -f temp_update_AUTHORS
/ordering_log.txt
139 rm -f temp_update_AUTHORS
/ordered_by_commits.txt
140 FileName
='temp_update_AUTHORS/all_git_namesonly_ordered.txt'
143 if [ "$LINE" = "VideoLAN" ]; then
144 echo "VideoLAN is not a person"
146 # grep "$LINE" temp_update_AUTHORS/new_coders_only.txt >> temp_update_AUTHORS/ordering_log.txt
147 grep "$LINE" temp_update_AUTHORS
/coders_only.txt
>> temp_update_AUTHORS
/ordering_log.txt
148 # grep "$LINE" temp_update_AUTHORS/coders_only.txt >> temp_update_AUTHORS/ordering_log.txt
149 # I want to keep the $? (it removes some broken names) but I could send the output to /dev/null
150 # If someone's name is a prefix to some other's name, this diff will show it:
151 # diff temp_update_AUTHORS/ordering_log.txt temp_update_AUTHORS/ordered_by_commits.txt
152 # AFAIK this will not effect the output, since we don't use the grep output but only the git output
153 if [ $?
= "0" ]; then
154 grep "$LINE" temp_update_AUTHORS
/artwork_git.txt ||
echo "$LINE" >> temp_update_AUTHORS
/ordered_by_commits.txt
161 cat temp_update_AUTHORS
/all_git.txt temp_update_AUTHORS
/po_git.txt|
sort|
uniq -D|
uniq|
sed 's/[0-9 \t]*\(.*\)/\1/g' > temp_update_AUTHORS
/translators.txt
162 wc -l temp_update_AUTHORS
/*
163 echo "Some contributors only commited into po. Please cross-check that with the localization part. See: temp_update_AUTHORS/translators.txt"
164 echo "But first, please check if temp_update_AUTHORS/review.txt contains complete names and other constraints for publishing (i.e. UPPERCASE name parts, broken text, a name and it's abbreviation both present...)"
167 sed 's/\(.*\)/\1 ---XXX---NEW/g' < temp_update_AUTHORS
/new_coders_only.txt |
cat - temp_update_AUTHORS
/programmers_part.txt |
sort > temp_update_AUTHORS
/review.txt
168 # This file contains VideoLAN as a contributor.
171 echo "For the lazy ones: Have a look at temp_update_AUTHORS/final.txt"
172 echo "Contains all git code commiters (the translators are stored somewhere else) sorted by commits, and the pre-git commiters"
174 echo 'For the lazy and brave (stupid?) ones: "cp new_AUTHORS AUTHORS" and check "git diff AUTHORS"'
176 echo "Programming" > temp_update_AUTHORS
/final.txt
177 echo "-----------" >> temp_update_AUTHORS
/final.txt
178 cat temp_update_AUTHORS
/ordered_by_commits.txt temp_update_AUTHORS
/pre-git.txt
>> temp_update_AUTHORS
/final.txt
181 echo "Listing email adresses used with different names..."
182 git shortlog
-sne |
sed 's/[^<]*\(.*\)/\1/g' |
sort|
uniq -d
183 echo "If something was listed here you should probably modify .mailmap"
185 # This last part puts the relevant addresses into temp_twice_used_adress/check_for_this.txt
186 # Currently, this is not needed (.mailmap is up to date)
188 #mkdir -p temp_twice_used_adress
189 #echo "Checking all git logs"
190 #git shortlog -sne > temp_twice_used_adress/all_shortlog_sne.txt
192 #echo "Removing everything but email addresses"
193 #sed 's/[^<]*\(.*\)/\1/g' < temp_twice_used_adress/all_shortlog_sne.txt |sort|uniq -d > temp_twice_used_adress/all_git_addresses_only.txt
195 #FileName='temp_twice_used_adress/all_git_addresses_only.txt'
198 # grep "$LINE" temp_twice_used_adress/all_shortlog_sne.txt >> temp_twice_used_adress/check_for_this.txt
199 ## I want to keep the $? (it removes some broken names) but I could send the output to /dev/null
200 # if [ $? = "0" ]; then
207 sed -n '1,2 p' < AUTHORS
> temp_update_AUTHORS
/new_AUTHORS
208 cat temp_update_AUTHORS
/final.txt
>> temp_update_AUTHORS
/new_AUTHORS
209 echo >>temp_update_AUTHORS
/new_AUTHORS
210 sed -n '/Artwork/,$ p' < AUTHORS
>> temp_update_AUTHORS
/new_AUTHORS
212 cp temp_update_AUTHORS
/new_AUTHORS .
213 #rm -rf temp_update_AUTHORS/