#!/usr/bin/env fuchsia-vendored-python
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import sys
import tarfile
import os


def main():
    parser = argparse.ArgumentParser("Archives a directory")
    parser.add_argument(
        "--src", help="Path to the directory to archive", required=True
    )
    parser.add_argument("--dst", help="Path to the archive", required=True)
    parser.add_argument(
        "--depfile", help="Path to dependency file", required=True
    )
    args = parser.parse_args()

    deps = []

    with tarfile.open(args.dst, "w:gz") as tar:
        for dirpath, dirnames, filenames in os.walk(args.src):
            for filename in filenames:
                path = os.path.join(dirpath, filename)
                deps.append(os.path.relpath(path))
                tar.add(path, arcname=os.path.relpath(path, args.src))

    with open(args.depfile, "w") as depfile:
        depfile.write("%s: %s\n" % (args.dst, " ".join(sorted(deps))))

    return 0


if __name__ == "__main__":
    sys.exit(main())
