mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 08:14:42 +04:00
Merge pull request #2641 from rkm/fix/dotnet-tool-prefix
fix for dotnet hooks with prefixes
This commit is contained in:
commit
bce513fac6
6 changed files with 57 additions and 5 deletions
|
|
@ -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,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
3
testing/resources/dotnet_hooks_csproj_prefix_repo/.gitignore
vendored
Normal file
3
testing/resources/dotnet_hooks_csproj_prefix_repo/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
nupkg/
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
- id: dotnet-example-hook
|
||||||
|
name: dotnet example hook
|
||||||
|
entry: testeroni.tool
|
||||||
|
language: dotnet
|
||||||
|
files: ''
|
||||||
12
testing/resources/dotnet_hooks_csproj_prefix_repo/Program.cs
Normal file
12
testing/resources/dotnet_hooks_csproj_prefix_repo/Program.cs
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace dotnet_hooks_repo
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello from dotnet!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue