# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, # You can obtain one at http://mozilla.org/MPL/2.0/.

import os
import subprocess
import tempfile

from mozbuild.vendor.host_base import BaseHost


class GitHost(BaseHost):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.workdir = tempfile.TemporaryDirectory(suffix="." + self.repo_url.netloc)
        subprocess.check_call([
            "git",
            "clone",
            self.repo_url.geturl(),
            self.workdir.name,
        ])

    def upstream_commit(self, revision):
        sha = subprocess.check_output(
            ["git", "rev-parse", revision], cwd=self.workdir.name
        )
        created = subprocess.check_output(
            ["git", "show", "--no-patch", "--format=%ci", revision],
            cwd=self.workdir.name,
        )
        return sha.strip(), created.strip()

    def upstream_snapshot(self, revision):
        tarball = os.path.join(self.workdir.name, revision.decode() + ".tar")
        subprocess.check_call(
            ["git", "archive", "--format=tar", "-o", tarball, revision],
            cwd=self.workdir.name,
        )
        return "file://" + tarball
