Merge ~bdrung/ddeb-retriever/+git/main:fix-2002833 into ddeb-retriever:main

Proposed by Steve Langasek
Status: Merged
Merged at revision: 612eb6550e5f581c5d3547e2abe8582f667ee5d4
Proposed branch: ~bdrung/ddeb-retriever/+git/main:fix-2002833
Merge into: ddeb-retriever:main
Diff against target: 125 lines (+44/-24)
2 files modified
archive_tools.py (+39/-19)
ddeb_retriever.py (+5/-5)
Reviewer Review Type Date Requested Status
Steve Langasek Approve
Review via email: mp+437227@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Steve Langasek (vorlon) :
review: Needs Fixing
Revision history for this message
Benjamin Drung (bdrung) wrote :

Good point. Implemented atomic file replacement.

The import sorting is correct, because imports are grouped by standard library, third-party, and own libraries. apt_pkg is the only third-party library.

Revision history for this message
Benjamin Drung (bdrung) :
Revision history for this message
Steve Langasek (vorlon) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/archive_tools.py b/archive_tools.py
2index 656b27b..c8cf1aa 100644
3--- a/archive_tools.py
4+++ b/archive_tools.py
5@@ -10,22 +10,25 @@ option) any later version. See http://www.gnu.org/copyleft/gpl.html for
6 the full text of the license.
7 '''
8
9-import apt_pkg
10-import urllib
11-import os
12-import gzip
13 import bz2
14+import contextlib
15+import glob
16+import gzip
17+import logging
18 import lzma
19-import tempfile
20+import os
21 import os.path
22 import shutil
23+import subprocess
24 import tarfile
25+import tempfile
26 import time
27-import subprocess
28-import glob
29-import logging
30+import typing
31+import urllib
32 from io import StringIO
33
34+import apt_pkg
35+
36 apt_pkg.init_system()
37
38
39@@ -191,6 +194,32 @@ def install_pool(archive_root, file_path, component, source):
40 return True
41
42
43+def _generate_release_signatures(gpg_keyid: typing.Optional[str], stderr: int) -> None:
44+ gpg = ["gpg", "-as", "--batch", "--personal-digest-preferences", "SHA512,SHA256,SHA1"]
45+ if gpg_keyid:
46+ gpg += ["--default-key", gpg_keyid]
47+
48+ with contextlib.suppress(FileNotFoundError):
49+ os.unlink(".InRelease.new")
50+ subprocess.run(
51+ gpg + ["--clearsign", "-o", ".InRelease.new", "Release"],
52+ check=True,
53+ stdout=subprocess.PIPE,
54+ stderr=stderr,
55+ )
56+ os.rename(".InRelease.new", "InRelease")
57+
58+ with contextlib.suppress(FileNotFoundError):
59+ os.unlink(".Release.gpg.new")
60+ subprocess.run(
61+ gpg + ["-b", "-o", ".Release.gpg.new", "Release"],
62+ check=True,
63+ stdout=subprocess.PIPE,
64+ stderr=stderr,
65+ )
66+ os.rename(".Release.gpg.new", "Release.gpg")
67+
68+
69 def create_indexes(archive_root, pocket, components, archs, ext='.deb',
70 stderr=subprocess.PIPE, ref_archive=None, gpg_sign=False,
71 gpg_keyid=None):
72@@ -309,16 +338,7 @@ Tree "dists/%s" {
73 with open('Release', 'wb') as r:
74 r.write(out)
75 if gpg_sign:
76- try:
77- os.unlink('Release.gpg')
78- except OSError:
79- pass
80- gpg = ['gpg', '-abs', '--batch',
81- '--personal-digest-preferences', 'SHA512,SHA256,SHA1']
82- if gpg_keyid:
83- gpg += ['--default-key', gpg_keyid]
84- gpg += ['-o', 'Release.gpg', 'Release']
85- assert subprocess.call(gpg, stdout=subprocess.PIPE, stderr=stderr) == 0
86+ _generate_release_signatures(gpg_keyid, stderr)
87 finally:
88 os.chdir(old_cwd)
89 if os.path.isdir(os.path.join(archive_root, 'lists')):
90@@ -550,8 +570,8 @@ Description: dummy package
91 # Test suite
92 #
93
94-import unittest
95 import sys
96+import unittest
97
98
99 class _DebcontrolMapTest(unittest.TestCase):
100diff --git a/ddeb_retriever.py b/ddeb_retriever.py
101index f7b30be..2f1ac4d 100644
102--- a/ddeb_retriever.py
103+++ b/ddeb_retriever.py
104@@ -1,16 +1,16 @@
105 #!/usr/bin/python3
106-import os
107-import logging
108-import urllib
109 import argparse
110-import fcntl
111 import datetime
112+import fcntl
113+import logging
114+import os
115+import urllib
116
117 import requests
118 import wadllib.iso_strptime
119
120-import lpinfo
121 import archive_tools
122+import lpinfo
123
124
125 def parse_args(args=None):

Subscribers

People subscribed via source and target branches