Clean fails if file missing in prime

I’m trying to run a clean after doing snapcraft prime.

snapcraft clean getcert -s build

To speed up testing I’m making lots of changes in prime including moving/renaming/deleting files.

The clean is failing because I manually deleted a file from the prime directory.

Why would the clean process care if it can’t find a file in prime?

The only way to fix the problem is to do a full snapcraft clean, which for me means a 15 minute build.

Note: ignore the reference to ‘/${SNAP_DATA}/’ in the filename, that was a mistake in the yaml. This error occurs regardless.

snapcraft clean getcert -s build
Cleaning priming area for getcert 
Traceback (most recent call last):
File "/snap/snapcraft/1094/bin/snapcraft", line 11, in <module>
load_entry_point('snapcraft==2.39', 'console_scripts', 'snapcraft')()

File “/snap/snapcraft/1094/usr/lib/python3.6/site-packages/pkg_resources/init.py”, line 565, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File “/snap/snapcraft/1094/usr/lib/python3.6/site-packages/pkg_resources/init.py”, line 2631, in load_entry_point
return ep.load()
File “/snap/snapcraft/1094/usr/lib/python3.6/site-packages/pkg_resources/init.py”, line 2291, in load
return self.resolve()
File “/snap/snapcraft/1094/usr/lib/python3.6/site-packages/pkg_resources/init.py”, line 2297, in resolve
module = import(self.module_name, fromlist=[‘name’], level=0)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/cli/main.py”, line 43, in
run(prog_name=‘snapcraft’)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/click/core.py”, line 722, in call
return self.main(*args, **kwargs)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/click/core.py”, line 697, in main
rv = self.invoke(ctx)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/click/core.py”, line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/snap/snapcraft/1094/lib/python3.6/site-packages/click/core.py”, line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/click/core.py”, line 535, in invoke
return callback(*args, **kwargs)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/cli/lifecycle.py”, line 191, in clean
lifecycle.clean(project_options, parts, step)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/lifecycle/_clean.py”, line 195, in clean
_clean_parts(parts, step, config, staged_state, primed_state)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/lifecycle/_clean.py”, line 87, in _clean_parts
part_name, step, config, staged_state, primed_state)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/lifecycle/_clean.py”, line 50, in _clean_part_and_all_dependents
config.parts.clean_part(part_name, staged_state, primed_state, step)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/project_loader/_parts_config.py”, line 148, in clean_part
part.clean(staged_state, primed_state, step)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/pluginhandler/init.py”, line 651, in clean
step, hint)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/pluginhandler/init.py”, line 683, in _clean_steps
self.clean_prime(project_primed_state, hint)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/pluginhandler/init.py”, line 604, in clean_prime
project_primed_state)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/pluginhandler/init.py”, line 626, in _clean_shared_area
shared_directory)
File “/snap/snapcraft/1094/lib/python3.6/site-packages/snapcraft/internal/pluginhandler/init.py”, line 846, in _clean_migrated_files
os.remove(os.path.join(directory, snap_file))
FileNotFoundError: [Errno 2] No such file or directory: ‘/home/bsutton/git/tomcat-with-ssl/prime/${SNAP_DATA}/letsencrypt/renewal-hooks/deploy’