Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
S
security-tracker
Manage
Activity
Members
Labels
Plan
Issues
11
Issue boards
Milestones
Code
Merge requests
16
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Debian Security Tracker
security-tracker
Commits
4649cd33
You need to sign in or sign up before continuing.
Commit
4649cd33
authored
5 years ago
by
Chris Lamb
👀
Browse files
Options
Downloads
Patches
Plain Diff
Port bin/maintainers to Python 3.x.
parent
3ec54e8f
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
bin/contact-maintainers
+83
-61
83 additions, 61 deletions
bin/contact-maintainers
with
83 additions
and
61 deletions
bin/contact-maintainers
+
83
−
61
View file @
4649cd33
#!/usr/bin/python
#!/usr/bin/
env
python
3
import
argparse
import
os
import
pwd
import
subprocess
import
re
import
sys
import
tempfile
import
urllib
2
import
urllib
import
warnings
from
jinja2
import
Template
def
get_full_name
():
full_name
=
os
.
getenv
(
'
DEBFULLNAME
'
)
full_name
=
os
.
getenv
(
"
DEBFULLNAME
"
)
if
full_name
:
return
full_name
.
decode
(
'
utf-8
'
)
return
pwd
.
getpwuid
(
os
.
getuid
()).
pw_gecos
.
split
(
'
,
'
)[
0
].
decode
(
'
utf-8
'
)
return
full_name
return
pwd
.
getpwuid
(
os
.
getuid
()).
pw_gecos
.
split
(
"
,
"
)[
0
].
decode
(
"
utf-8
"
)
def
get_maintainers
(
pkg
):
return
u
"
{}@packages.debian.org
"
.
format
(
pkg
)
try
:
import
rdflib
except
ImportError
:
warnings
.
warn
(
'
python-rdflib not installed; will fall back to PTS email address
'
)
def
get_maintainers
(
pkg
):
return
u
'
{}@packages.debian.org
'
.
format
(
pkg
)
warnings
.
warn
(
"
python-rdflib not installed; will fall back to PTS email address
"
)
else
:
def
get_maintainers
(
pkg
):
import
re
,
urllib
# RDF object and predicate references used on PTS
project
=
rdflib
.
term
.
URIRef
(
u
'
http://packages.qa.debian.org/{}#project
'
.
format
(
pkg
))
has_contributor
=
rdflib
.
term
.
URIRef
(
u
'
http://schema.org/contributor
'
)
is_named
=
rdflib
.
term
.
URIRef
(
u
'
http://xmlns.com/foaf/0.1/name
'
)
is_same_as
=
rdflib
.
term
.
URIRef
(
u
'
http://www.w3.org/2002/07/owl#sameAs
'
)
project
=
rdflib
.
term
.
URIRef
(
u
"
http://packages.qa.debian.org/{}#project
"
.
format
(
pkg
)
)
has_contributor
=
rdflib
.
term
.
URIRef
(
u
"
http://schema.org/contributor
"
)
is_named
=
rdflib
.
term
.
URIRef
(
u
"
http://xmlns.com/foaf/0.1/name
"
)
is_same_as
=
rdflib
.
term
.
URIRef
(
u
"
http://www.w3.org/2002/07/owl#sameAs
"
)
maint
=
[]
graph
=
rdflib
.
Graph
()
try
:
graph
.
parse
(
'
https://packages.qa.debian.org/{}/{}.rdf
'
.
format
(
re
.
match
(
'
((?:lib)?.)
'
,
pkg
).
group
(
1
),
pkg
))
except
urllib2
.
HTTPError
as
exc
:
graph
.
parse
(
"
https://packages.qa.debian.org/{}/{}.rdf
"
.
format
(
re
.
match
(
"
((?:lib)?.)
"
,
pkg
).
group
(
1
),
pkg
)
)
except
urllib
.
error
.
HTTPError
as
exc
:
if
exc
.
code
==
404
:
raise
ValueError
(
"
unknown package
'
{}
'"
.
format
(
pkg
))
raise
for
contrib
in
graph
[
project
:
has_contributor
]:
names
=
[
n
for
n
in
graph
[
contrib
:
is_named
]]
addresses
=
[
urllib
.
unquote
(
m
.
group
(
1
))
for
m
in
map
(
re
.
compile
(
r
'
http://webid\.debian\.net/maintainers/(.*)#agent$
'
).
match
,
graph
[
contrib
:
is_same_as
])
if
m
]
for
contrib
in
graph
[
project
:
has_contributor
]:
names
=
[
n
for
n
in
graph
[
contrib
:
is_named
]]
addresses
=
[
urllib
.
parse
.
unquote
(
m
.
group
(
1
))
for
m
in
map
(
re
.
compile
(
r
"
http://webid\.debian\.net/maintainers/(.*)#agent$
"
).
match
,
graph
[
contrib
:
is_same_as
],
)
if
m
]
if
not
names
or
not
addresses
:
warnings
.
warn
(
'
found contributor missing name and/or address
'
)
warnings
.
warn
(
"
found contributor missing name and/or address
"
)
continue
address
=
addresses
[
0
]
if
'
@
'
not
in
address
:
address
+=
'
@debian.org
'
if
"
@
"
not
in
address
:
address
+=
"
@debian.org
"
maint
.
append
(
u
'"
{}
"
<{}>
'
.
format
(
names
[
0
],
address
))
return
u
'
,
'
.
join
(
maint
)
return
u
"
,
"
.
join
(
maint
)
# Parse command line
parser
=
argparse
.
ArgumentParser
(
description
=
'
Get in touch with package maintainers
'
)
parser
.
add_argument
(
'
--force
'
,
action
=
'
store_true
'
,
help
=
'
Ignore safety checks
'
)
parser
.
add_argument
(
'
--lts
'
,
action
=
'
store_true
'
,
help
=
'
Act as a member of the LTS team
'
)
parser
.
add_argument
(
'
--no-dsa
'
,
dest
=
'
no_dsa
'
,
action
=
'
store_true
'
,
help
=
'
Say that issues are low severity (no need for DSA/DLA)
'
)
parser
.
add_argument
(
'
--minor
'
,
dest
=
'
minor_issues
'
,
action
=
'
store_true
'
,
help
=
'
Say that issues are low severity and someone will work on them (LTS team only)
'
)
parser
.
add_argument
(
'
--mailer
'
,
action
=
'
store
'
,
default
=
'
mutt -H {}
'
,
help
=
'
Command executed. Must contain {} to be replaced
'
'
by the filename of the draft contact mail
'
)
parser
.
add_argument
(
'
package
'
)
parser
.
add_argument
(
'
cve
'
,
nargs
=
'
*
'
)
parser
=
argparse
.
ArgumentParser
(
description
=
"
Get in touch with package maintainers
"
)
parser
.
add_argument
(
"
--force
"
,
action
=
"
store_true
"
,
help
=
"
Ignore safety checks
"
)
parser
.
add_argument
(
"
--lts
"
,
action
=
"
store_true
"
,
help
=
"
Act as a member of the LTS team
"
)
parser
.
add_argument
(
"
--no-dsa
"
,
dest
=
"
no_dsa
"
,
action
=
"
store_true
"
,
help
=
"
Say that issues are low severity (no need for DSA/DLA)
"
,
)
parser
.
add_argument
(
"
--minor
"
,
dest
=
"
minor_issues
"
,
action
=
"
store_true
"
,
help
=
"
Say that issues are low severity and someone will work on them (LTS team only)
"
,
)
parser
.
add_argument
(
"
--mailer
"
,
action
=
"
store
"
,
default
=
"
mutt -H {}
"
,
help
=
"
Command executed. Must contain {} to be replaced
"
"
by the filename of the draft contact mail
"
,
)
parser
.
add_argument
(
"
package
"
)
parser
.
add_argument
(
"
cve
"
,
nargs
=
"
*
"
)
args
=
parser
.
parse_args
()
cc
=
'
debian-lts@lists.debian.org
'
if
args
.
lts
else
'
team@security.debian.org
'
team
=
'
lts
'
if
args
.
lts
else
'
sec
'
model
=
'
no-dsa
'
if
args
.
no_dsa
else
'
update-planned
'
minor
=
'
-minor
'
if
args
.
minor_issues
and
args
.
lts
else
''
template_file
=
'
templates/{}-{}{}.txt
'
.
format
(
team
,
model
,
minor
)
cc
=
"
debian-lts@lists.debian.org
"
if
args
.
lts
else
"
team@security.debian.org
"
team
=
"
lts
"
if
args
.
lts
else
"
sec
"
model
=
"
no-dsa
"
if
args
.
no_dsa
else
"
update-planned
"
minor
=
"
-minor
"
if
args
.
minor_issues
and
args
.
lts
else
""
template_file
=
"
templates/{}-{}{}.txt
"
.
format
(
team
,
model
,
minor
)
# Basic check
instructions
=
"
packages/{}.txt
"
.
format
(
args
.
package
)
...
...
@@ -100,12 +122,12 @@ dontcall = "data/packages/lts-do-not-call"
if
args
.
lts
and
not
args
.
force
:
with
open
(
dontcall
)
as
f
:
for
line
in
f
:
if
line
[
0
]
==
'
#
'
:
if
line
[
0
]
==
"
#
"
:
continue
if
not
line
.
strip
():
continue
if
line
.
split
()[
0
]
==
args
.
package
:
print
"
Maintainer(s) may not be contacted for LTS issues.
"
print
(
"
Maintainer(s) may not be contacted for LTS issues.
"
)
print
(
"
Reason: {}
"
.
format
(
"
"
.
join
(
line
.
split
()[
1
:])))
print
(
"
If you still want to run this script, run it with --force.
"
)
sys
.
exit
(
1
)
...
...
@@ -119,21 +141,21 @@ if args.lts and not args.force:
# include it in the recipients of the mail
context
=
{
'
package
'
:
args
.
package
,
'
sender
'
:
get_full_name
(),
'
cve
'
:
args
.
cve
,
'
to
'
:
get_maintainers
(
args
.
package
),
'
cc
'
:
cc
,
'
uploaders
'
:
''
"
package
"
:
args
.
package
,
"
sender
"
:
get_full_name
(),
"
cve
"
:
args
.
cve
,
"
to
"
:
get_maintainers
(
args
.
package
),
"
cc
"
:
cc
,
"
uploaders
"
:
""
,
}
# Generate the mail
with
open
(
template_file
)
as
f
:
template
=
Template
(
f
.
read
()
.
decode
(
'
utf-8
'
)
)
template
=
Template
(
f
.
read
())
fd
,
filename
=
tempfile
.
mkstemp
(
prefix
=
'
contact-maintainers
'
,
suffix
=
'
.txt
'
)
draft
=
os
.
fdopen
(
fd
,
'
w
'
)
draft
.
write
(
template
.
render
(
context
).
encode
(
'
utf-8
'
))
fd
,
filename
=
tempfile
.
mkstemp
(
prefix
=
"
contact-maintainers
"
,
suffix
=
"
.txt
"
)
draft
=
os
.
fdopen
(
fd
,
"
wb
"
)
draft
.
write
(
template
.
render
(
context
).
encode
(
"
utf-8
"
))
draft
.
close
()
os
.
system
(
args
.
mailer
.
format
(
filename
))
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment