load("//tools/build/bazel:generate_workspace.bzl", "maven_coordinates")

# Example invocation:
# bazel build $(bazel query 'kind("_bnd rule", //...)') \
#       --aspects tools/build/bazel/publish_catalog.bzl%publish_catalog 2>&1 | \
#     egrep "DEBUG: .*mvn_jar.bzl" | cut -d\  -f3-

def _remote(group_id, artifact_id, version, packaging, classifier):
    p = group_id.replace(".", "/") + "/" + artifact_id + "/" + version + "/" + artifact_id + "-" + version
    if classifier != None:
      p += "-" + classifier
    p += "." + packaging
    return p

def _impl(target, ctx):
    coords = maven_coordinates(target.label)
    mvn = coords.split(":")
    group_id = mvn[1]
    artifact_id = mvn[2]
    version = mvn[len(mvn) - 1]
    packaging = "jar"
    classifier = None

    if len(mvn) > 4:
        packaging = mvn[3]

    c = artifact_id.split("-")

    if len(c) > 1 and c[len(c)-1] in ("javadoc", "sources", "tests", "pom"):
        classifier = c[len(c)-1]
        artifact_id = "-".join(c[:len(c)-1])
        if classifier == "pom":
            packaging = classifier
            classifier = None

    for f in target.files:
        print ("%s\t%s" % (f.path, _remote(group_id, artifact_id, version, packaging, classifier)))
    return []

publish_catalog = aspect(
    implementation = _impl,
)
