2017-07-13 1 views
0

J'ai un test java J'essaie de faire un bac à sable qui fait une logique de téléchargement complexe.
Je pense à l'écriture d'une règle de référentiel qui démarrera une application java en utilisant repository_ctx.execute pour exécuter cette logique au lieu de la dupliquer dans skylark.Règle du référentiel Bazel - télécharger un fichier dans repository_ctx.execute

Comment obtenir le contenu de cet appel?
Je peux passer à l'application java un chemin/nom de fichier pour télécharger le fichier mais je ne suis pas sûr du chemin à lui donner. Je peux peut-être avoir imprimer les octets sur stdout et les récupérer via l'exec_result (ça sonne horrible).

Répondre

1

Vous pouvez utiliser repository_ctx.path("path/to/file") qui renvoie path pour obtenir un chemin relatif à l'espace de travail généré, puis en utilisant path.realpath vous pouvez obtenir un nom canonique pour la sortie.

La collecte de la sortie de exec_result à utiliser comme entrée de fichier devrait fonctionner mais elle n'a jamais été essayée à ma connaissance, donc il pourrait y avoir un problème d'encodage bizarre.

+0

Cela peut être un chemin inexistant à droite? Si je fais repo_ctx.path ("downloads/MySQL.installer") et demande à l'outil de télécharger il y aura-t-il une sortie de la règle? La dernière partie est de savoir si un répertoire peut être la sortie? Merci! – Ittai

+1

Je ne comprends pas le "sera-ce une sortie de la règle?" question. Cela peut être un chemin inexistant et l'outil doit le créer ensuite. –

+0

NM. J'ai réalisé que le fichier BUILD que je crée devrait déclarer un groupe de fichiers pour le * répertoire * qui en fera une sortie de la règle. Merci. – Ittai