forked from oracle/truffleruby
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate_copyright.rb
126 lines (99 loc) · 3.44 KB
/
update_copyright.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Copyright (c) 2014, 2016 Oracle and/or its affiliates. All rights reserved. This
# code is released under a tri EPL/GPL/LGPL license. You can use it,
# redistribute it and/or modify it under the terms of the:
#
# Eclipse Public License version 1.0
# GNU General Public License version 2
# GNU Lesser General Public License version 2.1
require 'rugged'
RB_COPYRIGHT = <<-EOS
# Copyright (c) #{Time.now.year} Oracle and/or its affiliates. All rights reserved. This
# code is released under a tri EPL/GPL/LGPL license. You can use it,
# redistribute it and/or modify it under the terms of the:
#
# Eclipse Public License version 1.0
# GNU General Public License version 2
# GNU Lesser General Public License version 2.1
EOS
JAVA_COPYRIGHT = <<-EOS
/*
* Copyright (c) #{Time.now.year} Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
* Eclipse Public License version 1.0
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
EOS
NEW_COPYRIGHT = {
'.rb' => RB_COPYRIGHT,
'.java' => JAVA_COPYRIGHT
}
EXTENSIONS = %w[.java .rb]
COPYRIGHT = /Copyright \(c\) (?<year1>\d{4})(?:, (?<year2>\d{4}))? Oracle\b/
OTHER_COPYRIGHTS = [
/Copyright \(c\) \d{4} Software Architecture Group, Hasso Plattner Institute/,
/Copyright \(c\) \d{4}(?:-\d{4})?,? Evan Phoenix/,
/Copyright \(c\) \d{4} Engine Yard/,
/Copyright \(c\) \d{4} Damien Miller <djm@mindrot\.org>/, # BCrypt
/\* BEGIN LICENSE BLOCK \**\s*\n\s*\*\s*Version: EPL 1\.0\/GPL 2\.0\/LGPL 2\.1/,
]
truffle_paths = %w[
src
test/truffle
spec/
] + [__FILE__]
excludes = %w[
test/truffle/pack-real-usage.rb
test/truffle/cexts
src/main/c/openssl
]
# Until those all have copyright headers
excludes << "src/main/java/org/truffleruby/parser"
truffle_paths.each do |path|
puts "WARNING: incorrect path #{path}" unless File.exist? path
end
abort "USAGE: ruby #{$0} DAYS" unless ARGV.first
days = Integer(ARGV.first)
since = Time.now - days * 24 * 3600
puts "Fixing copyright years for commits in the last #{days} days"
now_year = Time.now.year # Hack this with previous year if needed
abort "Too far back in time: #{since} but we are in #{now_year}" unless since.year == now_year
repo = Rugged::Repository.new('.')
head_commit = repo.head.target
first_commit = nil
repo.walk(head_commit, Rugged::SORT_DATE) { |commit|
break if commit.time < since
first_commit = commit
}
abort "No commit in that range" unless first_commit
diff = first_commit.diff(head_commit)
paths = diff.each_delta.to_a.map { |delta|
delta.new_file[:path]
}.select { |path|
EXTENSIONS.include?(File.extname(path)) &&
truffle_paths.any? { |prefix| path.start_with? prefix } &&
excludes.none? { |prefix| path.start_with? prefix }
}
paths.each do |file|
next unless File.exist? file
header = File.read(file, 200)
unless COPYRIGHT =~ header
if OTHER_COPYRIGHTS.none? { |copyright| copyright =~ header }
puts "Adding copyright in #{file}"
File.write(file, NEW_COPYRIGHT[File.extname(file)]+File.read(file))
end
next
end
year1, year2 = $~[:year1], $~[:year2]
year1 = Integer(year1)
year2 = Integer(year2 || year1)
if now_year > year2
contents = File.read(file)
years = "#{year1}, #{now_year}"
contents.sub!(COPYRIGHT, "Copyright (c) #{years} Oracle")
File.write(file, contents)
puts "Updated year in #{file}"
end
end