| # Copyright 2019 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """This module provides the copy_debs_to_folder rule.""" |
| |
| def _is_wanted_file(f): |
| """We only want real debs, exclude the *.changes and deb.deb symlinks.""" |
| return f.basename.endswith(".deb") and "_" in f.basename |
| |
| def _quote(s): |
| """Quotes a string per bash quoting rules.""" |
| return "'" + s.replace("'", "'\\''") + "'" |
| |
| def _copy_debs_to_folder_impl(ctx): |
| """Copies only 'real' *.deb files into the specified folder.""" |
| out_dir = ctx.attr.out_dir |
| |
| source_files = [f for f in ctx.files.srcs if _is_wanted_file(f)] |
| dest_files = [ctx.actions.declare_file(out_dir + "/" + f.basename) for f in source_files] |
| dest_dir = dest_files[0].dirname |
| |
| command = "mkdir -p %s; cp %s %s" % (dest_dir, " ".join([_quote(f.path) for f in source_files]), dest_dir) |
| ctx.actions.run_shell( |
| inputs = source_files, |
| outputs = dest_files, |
| progress_message = "Running " + command, |
| command = command, |
| ) |
| |
| return [DefaultInfo(files = depset(dest_files))] |
| |
| copy_debs_to_folder = rule( |
| implementation = _copy_debs_to_folder_impl, |
| attrs = { |
| "srcs": attr.label_list( |
| mandatory = True, |
| allow_files = True, |
| ), |
| "out_dir": attr.string(mandatory = True), |
| }, |
| ) |