Merge pull request #2641 from rkm/fix/dotnet-tool-prefix

fix for dotnet hooks with prefixes
This commit is contained in:
Anthony Sottile 2022-12-21 14:13:14 -05:00 committed by GitHub
commit bce513fac6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 57 additions and 5 deletions

View file

@ -2,6 +2,9 @@ from __future__ import annotations
import contextlib import contextlib
import os.path import os.path
import re
import xml.etree.ElementTree
import zipfile
from typing import Generator from typing import Generator
from typing import Sequence from typing import Sequence
@ -57,10 +60,29 @@ def install_environment(
), ),
) )
# Determine tool from the packaged file <tool_name>.<version>.nupkg nupkg_dir = prefix.path(build_dir)
build_outputs = os.listdir(os.path.join(prefix.prefix_dir, build_dir)) nupkgs = [x for x in os.listdir(nupkg_dir) if x.endswith('.nupkg')]
for output in build_outputs:
tool_name = output.split('.')[0] if not nupkgs:
raise AssertionError('could not find any build outputs to install')
for nupkg in nupkgs:
with zipfile.ZipFile(os.path.join(nupkg_dir, nupkg)) as f:
nuspec, = (x for x in f.namelist() if x.endswith('.nuspec'))
with f.open(nuspec) as spec:
tree = xml.etree.ElementTree.parse(spec)
namespace = re.match(r'{.*}', tree.getroot().tag)
if not namespace:
raise AssertionError('could not parse namespace from nuspec')
tool_id_element = tree.find(f'.//{namespace[0]}id')
if tool_id_element is None:
raise AssertionError('expected to find an "id" element')
tool_id = tool_id_element.text
if not tool_id:
raise AssertionError('"id" element missing tool name')
# Install to bin dir # Install to bin dir
helpers.run_setup_cmd( helpers.run_setup_cmd(
@ -69,7 +91,7 @@ def install_environment(
'dotnet', 'tool', 'install', 'dotnet', 'tool', 'install',
'--tool-path', os.path.join(envdir, BIN_DIR), '--tool-path', os.path.join(envdir, BIN_DIR),
'--add-source', build_dir, '--add-source', build_dir,
tool_name, tool_id,
), ),
) )

View file

@ -0,0 +1,3 @@
bin/
obj/
nupkg/

View file

@ -0,0 +1,5 @@
- id: dotnet-example-hook
name: dotnet example hook
entry: testeroni.tool
language: dotnet
files: ''

View file

@ -0,0 +1,12 @@
using System;
namespace dotnet_hooks_repo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello from dotnet!");
}
}
}

View file

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<PackAsTool>true</PackAsTool>
<ToolCommandName>testeroni.tool</ToolCommandName>
<PackageOutputPath>./nupkg</PackageOutputPath>
</PropertyGroup>
</Project>

View file

@ -1031,6 +1031,7 @@ def test_local_perl_additional_dependencies(store):
'dotnet_hooks_csproj_repo', 'dotnet_hooks_csproj_repo',
'dotnet_hooks_sln_repo', 'dotnet_hooks_sln_repo',
'dotnet_hooks_combo_repo', 'dotnet_hooks_combo_repo',
'dotnet_hooks_csproj_prefix_repo',
), ),
) )
def test_dotnet_hook(tempdir_factory, store, repo): def test_dotnet_hook(tempdir_factory, store, repo):