Skip to content

Commit 39d5017

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 da2aad9 commit 39d5017

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
@@ -16,7 +16,6 @@
1616
from mozpack import mozjar
1717
from requests_hawk import HawkAuth
1818

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

109108

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

145144

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

164173

165174
# _ensure_one_precomplete {{{1
166-
def _ensure_one_precomplete(tmp_dir, adj):
175+
def _ensure_one_precomplete(tmp_dir):
167176
"""Ensure we only have one `precomplete` file in `tmp_dir`."""
168177
precompletes = glob.glob(os.path.join(tmp_dir, "**", "precomplete"), recursive=True)
169178
if len(precompletes) < 1:
170179
raise IScriptError('No `precomplete` file found in "%s"', tmp_dir)
171180
if len(precompletes) > 1:
172-
raise IScriptError('More than one `precomplete` file %s in "%s"', adj, tmp_dir)
181+
raise IScriptError('More than one `precomplete` file in "%s"', tmp_dir)
173182
return precompletes[0]
174183

175184

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
@@ -31,7 +31,6 @@
3131
from winsign.crypto import load_pem_certs
3232

3333
from signingscript import task, utils
34-
from signingscript.createprecomplete import generate_precomplete
3534
from signingscript.exceptions import SigningScriptError
3635
from signingscript.rcodesign import RCodesignError, rcodesign_notarize, rcodesign_notary_wait, rcodesign_staple
3736

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

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

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

580579

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

599608

600609
# _ensure_one_precomplete {{{1
601-
def _ensure_one_precomplete(tmp_dir, adj):
610+
def _ensure_one_precomplete(tmp_dir):
602611
"""Ensure we only have one `precomplete` file in `tmp_dir`."""
603612
return get_single_item_from_sequence(
604613
glob.glob(os.path.join(tmp_dir, "**", "precomplete"), recursive=True),
605614
condition=lambda _: True,
606615
ErrorClass=SigningScriptError,
607616
no_item_error_message='No `precomplete` file found in "{}"'.format(tmp_dir),
608-
too_many_item_error_message='More than one `precomplete` file {} in "{}"'.format(adj, tmp_dir),
617+
too_many_item_error_message='More than one `precomplete` file in "{}"'.format(tmp_dir),
609618
)
610619

611620

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)