Skip to content

Commit c1c8558

Browse files
committed
Bug 1882852 - remove vendored createprecomplete in iscript and signingscript
This needed to be kept in sync with the code in mozilla-central, or bad things happen, which bit us in https://bugzilla.mozilla.org/show_bug.cgi?id=1882322 Instead, directly add remove instructions for the extra signature files we're adding, leaving the rest of the file unchanged.
1 parent aa4b9cf commit c1c8558

File tree

8 files changed

+57
-197
lines changed

8 files changed

+57
-197
lines changed

iscript/src/iscript/autograph.py

+21-12
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from mozpack import mozjar
1616
from requests_hawk import HawkAuth
1717

18-
from iscript.createprecomplete import generate_precomplete
1918
from iscript.exceptions import IScriptError
2019
from scriptworker_client.aio import raise_future_exceptions, retry_async
2120
from scriptworker_client.utils import makedirs, rm
@@ -100,9 +99,9 @@ async def sign_widevine_dir(config, sign_config, app_dir):
10099
all_files.append(to)
101100
await raise_future_exceptions(tasks)
102101
remove_extra_files(app_dir, all_files)
103-
# Regenerate the `precomplete` file, which is used for cleanup before
102+
# Update the `precomplete` file, which is used for cleanup before
104103
# applying a complete mar.
105-
_run_generate_precomplete(config, app_dir)
104+
_update_precomplete(config, app_dir)
106105
return app_dir
107106

108107

@@ -142,16 +141,26 @@ def _get_widevine_signing_files(file_list):
142141
return files
143142

144143

145-
# _run_generate_precomplete {{{1
146-
def _run_generate_precomplete(config, app_dir):
144+
# _update_precomplete {{{1
145+
def _update_precomplete(config, app_dir):
147146
"""Regenerate `precomplete` file with widevine sig paths for complete mar."""
148147
log.info("Generating `precomplete` file...")
149-
path = _ensure_one_precomplete(app_dir, "before")
150-
with open(path, "r") as fh:
148+
precomplete = _ensure_one_precomplete(app_dir)
149+
with open(precomplete, "r") as fh:
151150
before = fh.readlines()
152-
generate_precomplete(os.path.dirname(path))
153-
path = _ensure_one_precomplete(app_dir, "after")
154-
with open(path, "r") as fh:
151+
with open(precomplete, "w") as fh:
152+
for line in before:
153+
fh.write(line)
154+
instr, path = line.strip().split(None, 1)
155+
if instr != "remove":
156+
continue
157+
if not path or path[0] != '"' or path[-1] != '"':
158+
continue
159+
file = path[1:-1]
160+
if _get_widevine_signing_files([file]):
161+
sigfile = _get_mac_sigpath(file)
162+
fh.write('remove "{}"\n'.format(sigfile))
163+
with open(precomplete, "r") as fh:
155164
after = fh.readlines()
156165
# Create diff file
157166
makedirs(os.path.join(config["artifact_dir"], "public", "logs"))
@@ -162,13 +171,13 @@ def _run_generate_precomplete(config, app_dir):
162171

163172

164173
# _ensure_one_precomplete {{{1
165-
def _ensure_one_precomplete(tmp_dir, adj):
174+
def _ensure_one_precomplete(tmp_dir):
166175
"""Ensure we only have one `precomplete` file in `tmp_dir`."""
167176
precompletes = glob.glob(os.path.join(tmp_dir, "**", "precomplete"), recursive=True)
168177
if len(precompletes) < 1:
169178
raise IScriptError('No `precomplete` file found in "%s"', tmp_dir)
170179
if len(precompletes) > 1:
171-
raise IScriptError('More than one `precomplete` file %s in "%s"', adj, tmp_dir)
180+
raise IScriptError('More than one `precomplete` file in "%s"', tmp_dir)
172181
return precompletes[0]
173182

174183

iscript/src/iscript/createprecomplete.py

-76
This file was deleted.

iscript/tests/test_autograph.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,7 @@ def fake_isfile(path):
135135

136136
mocker.patch.object(autograph, "sign_widevine_with_autograph", new=noop_async)
137137
mocker.patch.object(autograph, "makedirs", new=noop_sync)
138-
mocker.patch.object(autograph, "generate_precomplete", new=noop_sync)
139-
mocker.patch.object(autograph, "_run_generate_precomplete", new=noop_sync)
138+
mocker.patch.object(autograph, "_update_precomplete", new=noop_sync)
140139
mocker.patch.object(os.path, "isfile", new=fake_isfile)
141140
mocker.patch.object(os, "walk", new=fake_walk)
142141

@@ -172,22 +171,21 @@ def test_get_widevine_signing_files(filenames, expected):
172171
assert autograph._get_widevine_signing_files(filenames) == expected
173172

174173

175-
# _run_generate_precomplete {{{1
174+
# _update_precomplete {{{1
176175
@pytest.mark.parametrize("num_precomplete,raises", ((1, False), (0, True), (2, True)))
177-
def test_run_generate_precomplete(tmp_path, num_precomplete, raises, mocker):
178-
mocker.patch.object(autograph, "generate_precomplete", new=noop_sync)
176+
def test_update_precomplete(tmp_path, num_precomplete, raises, mocker):
179177
work_dir = tmp_path / "work"
180178
config = {"artifact_dir": tmp_path / "artifacts"}
181179
for i in range(0, num_precomplete):
182180
path = os.path.join(work_dir, "foo", str(i))
183181
makedirs(path)
184182
with open(os.path.join(path, "precomplete"), "w") as fh:
185-
fh.write("blah")
183+
fh.write('remove "blah"\n')
186184
if raises:
187185
with pytest.raises(IScriptError):
188-
autograph._run_generate_precomplete(config, work_dir)
186+
autograph._update_precomplete(config, work_dir)
189187
else:
190-
autograph._run_generate_precomplete(config, work_dir)
188+
autograph._update_precomplete(config, work_dir)
191189

192190

193191
# remove_extra_files {{{1

iscript/tox.ini

-2
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,3 @@ addopts = -vv -s --color=yes
5858

5959
[coverage:run]
6060
branch = true
61-
omit =
62-
src/iscript/createprecomplete.py

signingscript/src/signingscript/createprecomplete.py

-76
This file was deleted.

signingscript/src/signingscript/sign.py

+23-14
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
from winsign.crypto import load_pem_certs
3131

3232
from signingscript import task, utils
33-
from signingscript.createprecomplete import generate_precomplete
3433
from signingscript.exceptions import SigningScriptError
3534
from signingscript.rcodesign import RCodesignError, rcodesign_notarize, rcodesign_notary_wait, rcodesign_staple
3635

@@ -316,9 +315,9 @@ async def sign_widevine_zip(context, orig_path, fmt):
316315
all_files.append(to)
317316
await raise_future_exceptions(tasks)
318317
remove_extra_files(tmp_dir, all_files)
319-
# Regenerate the `precomplete` file, which is used for cleanup before
318+
# Update the `precomplete` file, which is used for cleanup before
320319
# applying a complete mar.
321-
_run_generate_precomplete(context, tmp_dir)
320+
_update_precomplete(context, tmp_dir)
322321
await _create_zipfile(context, orig_path, all_files, mode="w", tmp_dir=tmp_dir)
323322
return orig_path
324323

@@ -373,9 +372,9 @@ async def sign_widevine_tar(context, orig_path, fmt):
373372
all_files.append(to)
374373
await raise_future_exceptions(tasks)
375374
remove_extra_files(tmp_dir, all_files)
376-
# Regenerate the `precomplete` file, which is used for cleanup before
375+
# Update the `precomplete` file, which is used for cleanup before
377376
# applying a complete mar.
378-
_run_generate_precomplete(context, tmp_dir)
377+
_update_precomplete(context, tmp_dir)
379378
await _create_tarfile(context, orig_path, all_files, compression, tmp_dir=tmp_dir)
380379
return orig_path
381380

@@ -577,16 +576,26 @@ def _get_omnija_signing_files(file_list):
577576
return files
578577

579578

580-
# _run_generate_precomplete {{{1
581-
def _run_generate_precomplete(context, tmp_dir):
579+
# _update_precomplete {{{1
580+
def _update_precomplete(context, tmp_dir):
582581
"""Regenerate `precomplete` file with widevine sig paths for complete mar."""
583582
log.info("Generating `precomplete` file...")
584-
path = _ensure_one_precomplete(tmp_dir, "before")
585-
with open(path, "r") as fh:
583+
precomplete = _ensure_one_precomplete(tmp_dir)
584+
with open(precomplete, "r") as fh:
586585
before = fh.readlines()
587-
generate_precomplete(os.path.dirname(path))
588-
path = _ensure_one_precomplete(tmp_dir, "after")
589-
with open(path, "r") as fh:
586+
with open(precomplete, "w") as fh:
587+
for line in before:
588+
fh.write(line)
589+
instr, path = line.strip().split(None, 1)
590+
if instr != "remove":
591+
continue
592+
if not path or path[0] != '"' or path[-1] != '"':
593+
continue
594+
file = path[1:-1]
595+
if _get_widevine_signing_files([file]):
596+
sigfile = _get_mac_sigpath(file)
597+
fh.write('remove "{}"\n'.format(sigfile))
598+
with open(precomplete, "r") as fh:
590599
after = fh.readlines()
591600
# Create diff file
592601
diff_path = os.path.join(context.config["work_dir"], "precomplete.diff")
@@ -597,14 +606,14 @@ def _run_generate_precomplete(context, tmp_dir):
597606

598607

599608
# _ensure_one_precomplete {{{1
600-
def _ensure_one_precomplete(tmp_dir, adj):
609+
def _ensure_one_precomplete(tmp_dir):
601610
"""Ensure we only have one `precomplete` file in `tmp_dir`."""
602611
return get_single_item_from_sequence(
603612
glob.glob(os.path.join(tmp_dir, "**", "precomplete"), recursive=True),
604613
condition=lambda _: True,
605614
ErrorClass=SigningScriptError,
606615
no_item_error_message='No `precomplete` file found in "{}"'.format(tmp_dir),
607-
too_many_item_error_message='More than one `precomplete` file {} in "{}"'.format(adj, tmp_dir),
616+
too_many_item_error_message='More than one `precomplete` file in "{}"'.format(tmp_dir),
608617
)
609618

610619

signingscript/tests/test_sign.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -532,10 +532,9 @@ def fake_isfile(path):
532532
mocker.patch.object(sign, "sign_file", new=noop_async)
533533
mocker.patch.object(sign, "sign_widevine_with_autograph", new=noop_async)
534534
mocker.patch.object(sign, "makedirs", new=noop_sync)
535-
mocker.patch.object(sign, "generate_precomplete", new=noop_sync)
535+
mocker.patch.object(sign, "_update_precomplete", new=noop_sync)
536536
mocker.patch.object(sign, "_create_tarfile", new=noop_async)
537537
mocker.patch.object(sign, "_create_zipfile", new=noop_async)
538-
mocker.patch.object(sign, "_run_generate_precomplete", new=noop_sync)
539538
mocker.patch.object(os.path, "isfile", new=fake_isfile)
540539

541540
if raises:
@@ -583,21 +582,20 @@ def test_get_widevine_signing_files(filenames, expected):
583582
assert sign._get_widevine_signing_files(filenames) == expected
584583

585584

586-
# _run_generate_precomplete {{{1
585+
# _update_precomplete {{{1
587586
@pytest.mark.parametrize("num_precomplete,raises", ((1, False), (0, True), (2, True)))
588-
def test_run_generate_precomplete(context, num_precomplete, raises, mocker):
589-
mocker.patch.object(sign, "generate_precomplete", new=noop_sync)
587+
def test_update_precomplete(context, num_precomplete, raises, mocker):
590588
work_dir = context.config["work_dir"]
591589
for i in range(0, num_precomplete):
592590
path = os.path.join(work_dir, "foo", str(i))
593591
makedirs(path)
594592
with open(os.path.join(path, "precomplete"), "w") as fh:
595-
fh.write("blah")
593+
fh.write('remove "blah"\n')
596594
if raises:
597595
with pytest.raises(SigningScriptError):
598-
sign._run_generate_precomplete(context, work_dir)
596+
sign._update_precomplete(context, work_dir)
599597
else:
600-
sign._run_generate_precomplete(context, work_dir)
598+
sign._update_precomplete(context, work_dir)
601599

602600

603601
# remove_extra_files {{{1

signingscript/tox.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,4 @@ addopts = -vv --color=yes
4949

5050
[coverage:run]
5151
branch = True
52-
omit = tests/*,src/signingscript/createprecomplete.py,src/signingscript/vendored/*
52+
omit = tests/*,src/signingscript/vendored/*

0 commit comments

Comments
 (0)