Skip to content

Commit ceba27b

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 8283c71 commit ceba27b

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

@@ -297,9 +296,9 @@ async def sign_widevine_zip(context, orig_path, fmt):
297296
all_files.append(to)
298297
await raise_future_exceptions(tasks)
299298
remove_extra_files(tmp_dir, all_files)
300-
# Regenerate the `precomplete` file, which is used for cleanup before
299+
# Update the `precomplete` file, which is used for cleanup before
301300
# applying a complete mar.
302-
_run_generate_precomplete(context, tmp_dir)
301+
_update_precomplete(context, tmp_dir)
303302
await _create_zipfile(context, orig_path, all_files, mode="w", tmp_dir=tmp_dir)
304303
return orig_path
305304

@@ -354,9 +353,9 @@ async def sign_widevine_tar(context, orig_path, fmt):
354353
all_files.append(to)
355354
await raise_future_exceptions(tasks)
356355
remove_extra_files(tmp_dir, all_files)
357-
# Regenerate the `precomplete` file, which is used for cleanup before
356+
# Update the `precomplete` file, which is used for cleanup before
358357
# applying a complete mar.
359-
_run_generate_precomplete(context, tmp_dir)
358+
_update_precomplete(context, tmp_dir)
360359
await _create_tarfile(context, orig_path, all_files, compression, tmp_dir=tmp_dir)
361360
return orig_path
362361

@@ -558,16 +557,26 @@ def _get_omnija_signing_files(file_list):
558557
return files
559558

560559

561-
# _run_generate_precomplete {{{1
562-
def _run_generate_precomplete(context, tmp_dir):
560+
# _update_precomplete {{{1
561+
def _update_precomplete(context, tmp_dir):
563562
"""Regenerate `precomplete` file with widevine sig paths for complete mar."""
564563
log.info("Generating `precomplete` file...")
565-
path = _ensure_one_precomplete(tmp_dir, "before")
566-
with open(path, "r") as fh:
564+
precomplete = _ensure_one_precomplete(tmp_dir)
565+
with open(precomplete, "r") as fh:
567566
before = fh.readlines()
568-
generate_precomplete(os.path.dirname(path))
569-
path = _ensure_one_precomplete(tmp_dir, "after")
570-
with open(path, "r") as fh:
567+
with open(precomplete, "w") as fh:
568+
for line in before:
569+
fh.write(line)
570+
instr, path = line.strip().split(None, 1)
571+
if instr != "remove":
572+
continue
573+
if not path or path[0] != '"' or path[-1] != '"':
574+
continue
575+
file = path[1:-1]
576+
if _get_widevine_signing_files([file]):
577+
sigfile = _get_mac_sigpath(file)
578+
fh.write('remove "{}"\n'.format(sigfile))
579+
with open(precomplete, "r") as fh:
571580
after = fh.readlines()
572581
# Create diff file
573582
diff_path = os.path.join(context.config["work_dir"], "precomplete.diff")
@@ -578,14 +587,14 @@ def _run_generate_precomplete(context, tmp_dir):
578587

579588

580589
# _ensure_one_precomplete {{{1
581-
def _ensure_one_precomplete(tmp_dir, adj):
590+
def _ensure_one_precomplete(tmp_dir):
582591
"""Ensure we only have one `precomplete` file in `tmp_dir`."""
583592
return get_single_item_from_sequence(
584593
glob.glob(os.path.join(tmp_dir, "**", "precomplete"), recursive=True),
585594
condition=lambda _: True,
586595
ErrorClass=SigningScriptError,
587596
no_item_error_message='No `precomplete` file found in "{}"'.format(tmp_dir),
588-
too_many_item_error_message='More than one `precomplete` file {} in "{}"'.format(adj, tmp_dir),
597+
too_many_item_error_message='More than one `precomplete` file in "{}"'.format(tmp_dir),
589598
)
590599

591600

signingscript/tests/test_sign.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -525,10 +525,9 @@ def fake_isfile(path):
525525
mocker.patch.object(sign, "sign_file", new=noop_async)
526526
mocker.patch.object(sign, "sign_widevine_with_autograph", new=noop_async)
527527
mocker.patch.object(sign, "makedirs", new=noop_sync)
528-
mocker.patch.object(sign, "generate_precomplete", new=noop_sync)
528+
mocker.patch.object(sign, "_update_precomplete", new=noop_sync)
529529
mocker.patch.object(sign, "_create_tarfile", new=noop_async)
530530
mocker.patch.object(sign, "_create_zipfile", new=noop_async)
531-
mocker.patch.object(sign, "_run_generate_precomplete", new=noop_sync)
532531
mocker.patch.object(os.path, "isfile", new=fake_isfile)
533532

534533
if raises:
@@ -576,21 +575,20 @@ def test_get_widevine_signing_files(filenames, expected):
576575
assert sign._get_widevine_signing_files(filenames) == expected
577576

578577

579-
# _run_generate_precomplete {{{1
578+
# _update_precomplete {{{1
580579
@pytest.mark.parametrize("num_precomplete,raises", ((1, False), (0, True), (2, True)))
581-
def test_run_generate_precomplete(context, num_precomplete, raises, mocker):
582-
mocker.patch.object(sign, "generate_precomplete", new=noop_sync)
580+
def test_update_precomplete(context, num_precomplete, raises, mocker):
583581
work_dir = context.config["work_dir"]
584582
for i in range(0, num_precomplete):
585583
path = os.path.join(work_dir, "foo", str(i))
586584
makedirs(path)
587585
with open(os.path.join(path, "precomplete"), "w") as fh:
588-
fh.write("blah")
586+
fh.write('remove "blah"\n')
589587
if raises:
590588
with pytest.raises(SigningScriptError):
591-
sign._run_generate_precomplete(context, work_dir)
589+
sign._update_precomplete(context, work_dir)
592590
else:
593-
sign._run_generate_precomplete(context, work_dir)
591+
sign._update_precomplete(context, work_dir)
594592

595593

596594
# 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)