diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 2b5f541..0000000 --- a/.appveyor.yml +++ /dev/null @@ -1,30 +0,0 @@ -#---------------------------------# -# Build Image # -#---------------------------------# -image: Visual Studio 2017 - -#---------------------------------# -# Build Script # -#---------------------------------# -build_script: - - ps: .\build.ps1 -Target AppVeyor - -# Tests -test: off - -#---------------------------------# -# Branches to build # -#---------------------------------# -branches: - # Whitelist - only: - - develop - - master - - /release/.*/ - - /hotfix/.*/ - -#---------------------------------# -# Build Cache # -#---------------------------------# -cache: -- tools -> setup.cake \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..6a12863 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,3 @@ +# These owners will be the default owners for everything in the repo and +# will be requested for review when someone opens a pull request. +* @bbtsoftware/dev-services \ No newline at end of file diff --git a/.github/codecov.yml b/.github/codecov.yml new file mode 100644 index 0000000..bfdc987 --- /dev/null +++ b/.github/codecov.yml @@ -0,0 +1,8 @@ +coverage: + status: + project: + default: + informational: true + patch: + default: + informational: true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..08b7f75 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: +- package-ecosystem: nuget + directory: "/src" + schedule: + interval: daily + open-pull-requests-limit: 10 diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000..53a707d --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,55 @@ +# This workflow will build TfsUrlParser project + +name: CI + +on: + push: + branches: + - master + - develop + pull_request: + branches: + - master + - develop + +defaults: + run: + working-directory: src + +jobs: + build: + env: + BUILD_CONFIG: "Debug" + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + + - name: Get Build Version + run: | + Import-Module ..\build\GetBuildVersion.psm1 + Write-Host $Env:GITHUB_REF + $version = GetBuildVersion -VersionString $Env:GITHUB_REF + echo "BUILD_VERSION=$version" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append + shell: pwsh + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration $BUILD_CONFIG -p:Version=$BUILD_VERSION --no-restore + + - name: Test + run: dotnet test -p:Configuration=$BUILD_CONFIG --no-restore --no-build --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./coverage + + - name: Codecov + uses: codecov/codecov-action@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..bffadbb --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +# This workflow will release TfsUrlParser + +name: Release + +on: + release: + types: [published] + +defaults: + run: + working-directory: src + +jobs: + build: + env: + BUILD_CONFIG: "Release" + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v3 + + - name: Get Build Version + run: | + Import-Module ..\build\GetBuildVersion.psm1 + Write-Host $Env:GITHUB_REF + $version = GetBuildVersion -VersionString $Env:GITHUB_REF + echo "BUILD_VERSION=$version" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append + shell: pwsh + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration $BUILD_CONFIG -p:Version=$BUILD_VERSION --no-restore + + - name: Test + run: dotnet test -p:Configuration=$BUILD_CONFIG --no-restore --no-build --verbosity normal --collect:"XPlat Code Coverage" + + - name: Codecov + uses: codecov/codecov-action@v1.5.2 + + - name: Setup NuGet + uses: NuGet/setup-nuget@v1 + + - name: Publish NuGet + run: nuget push **\*.nupkg -Source 'https://api.nuget.org/v3/index.json' -ApiKey ${{secrets.NUGETORG}} diff --git a/.gitignore b/.gitignore index e1deada..d34c015 100644 --- a/.gitignore +++ b/.gitignore @@ -277,8 +277,3 @@ paket-files/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc - -# Cake - Uncomment if you are using it -tools/** -!tools/packages.config -BuildArtifacts/ \ No newline at end of file diff --git a/.mergify.yml b/.mergify.yml new file mode 100644 index 0000000..8c38b80 --- /dev/null +++ b/.mergify.yml @@ -0,0 +1,5 @@ +pull_request_rules: + - name: delete head branch after merge + conditions: [] + actions: + delete_head_branch: {} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index eb79eee..0000000 --- a/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: csharp -script: - - ./build.sh -v diagnostic -os: - - linux - - osx -cache: - directories: - - packages - - tools diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..30d4a44 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/netstandard2.0/TfsUrlParser.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..60349ef --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/TfsUrlParser.sln", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/TfsUrlParser/TfsUrlParser.sln", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/src/TfsUrlParser/TfsUrlParser.sln" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/GitReleaseManager.yaml b/GitReleaseManager.yaml deleted file mode 100644 index 721c1ba..0000000 --- a/GitReleaseManager.yaml +++ /dev/null @@ -1,12 +0,0 @@ -issue-labels-include: -- Breaking change -- Feature -- Bug -- Improvement -- Documentation -issue-labels-exclude: -- Build -issue-labels-alias: - - name: Documentation - header: Documentation - plural: Documentation \ No newline at end of file diff --git a/README.md b/README.md index 0b22619..cba1b38 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,30 @@ # Azure DevOps URL parser +[![NuGet](https://img.shields.io/nuget/v/TfsUrlParser.svg)](https://www.nuget.org/packages/TfsUrlParser) +[![Build status](https://github.com/bbtsoftware/TfsUrlParser/actions/workflows/dotnet.yml/badge.svg?branch=develop)](https://github.com/bbtsoftware/TfsUrlParser/actions/workflows/dotnet.yml) +[![Build status](https://github.com/bbtsoftware/TfsUrlParser/actions/workflows/release.yml/badge.svg?branch=master)](https://github.com/bbtsoftware/TfsUrlParser/actions/workflows/release.yml) +[![Coverage Status](https://codecov.io/gh/bbtsoftware/TfsUrlParser/branch/develop/graph/badge.svg?token=0VLbB8a8EF)](https://codecov.io/gh/bbtsoftware/TfsUrlParser) This NuGet package contains code for parsing Azure DevOps and Azure DevOps Server URLs. [![License](http://img.shields.io/:license-mit-blue.svg)](https://github.com/bbtsoftware/TfsUrlParser/blob/master/LICENSE) -## Information +## How to use -| | Stable | Pre-release | -|:--:|:--:|:--:| -|GitHub Release|-|[![GitHub release](https://img.shields.io/github/release/bbtsoftware/TfsUrlParser.svg)](https://github.com/bbtsoftware/TfsUrlParser/releases/latest)| -|NuGet|[![NuGet](https://img.shields.io/nuget/v/TfsUrlParser.svg)](https://www.nuget.org/packages/TfsUrlParser)|[![NuGet](https://img.shields.io/nuget/vpre/TfsUrlParser.svg)](https://www.nuget.org/packages/TfsUrlParser)| +To use the Azure DevOps URL parser you need to add the [TfsUrlParser NuGet package](https://www.nuget.org/packages/TfsUrlParser/). -## Build Status +```csharp + var repositoryDescription = + new RepositoryDescription( + "http://myserver:8080/tfs/defaultcollection/myproject/_git/myrepository"); -|Develop|Master| -|:--:|:--:| -|[![Build status](https://ci.appveyor.com/api/projects/status/i4evodvrv7qc9e6y/branch/develop?svg=true)](https://ci.appveyor.com/project/BBTSoftwareAG/tfsurlparser/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/i4evodvrv7qc9e6y/branch/master?svg=true)](https://ci.appveyor.com/project/BBTSoftwareAG/tfsurlparser/branch/master)| - -## Code Coverage - -[![Coverage Status](https://coveralls.io/repos/github/BBTSoftwareAG/tfs-url-parser/badge.svg?branch=develop)](https://coveralls.io/github/BBTSoftwareAG/tfs-url-parser?branch=develop) - -## Quick Links - -* [Documentation](https://bbtsoftware.github.io/TfsUrlParser/) - -## Build - -To build this package we are using Cake. - -On Windows PowerShell run: - -```powershell -./build + Console.WriteLine(repositoryDescription.ServerUrl); + Console.WriteLine(repositoryDescription.CollectionUrl); + Console.WriteLine(repositoryDescription.CollectionName); + Console.WriteLine(repositoryDescription.ProjectName); + Console.WriteLine(repositoryDescription.RepositoryUrl); + Console.WriteLine(repositoryDescription.RepositoryName); ``` -On OSX/Linux run: - -```bash -./build.sh -``` +## Build +`dotnet build .\src\TfsUrlParser.sln` diff --git a/build.ps1 b/build.ps1 deleted file mode 100644 index bdfb32b..0000000 --- a/build.ps1 +++ /dev/null @@ -1,184 +0,0 @@ -########################################################################## -# This is the Cake bootstrapper script for PowerShell. -# This file was downloaded from https://github.com/cake-build/resources -# Feel free to change this file to fit your needs. -########################################################################## - -<# -.SYNOPSIS -This is a Powershell script to bootstrap a Cake build. -.DESCRIPTION -This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) -and execute your Cake build script with the parameters you provide. -.PARAMETER Script -The build script to execute. -.PARAMETER Target -The build script target to run. -.PARAMETER Configuration -The build configuration to use. -.PARAMETER Verbosity -Specifies the amount of information to be displayed. -.PARAMETER Experimental -Tells Cake to use the latest Roslyn release. -.PARAMETER WhatIf -Performs a dry run of the build script. -No tasks will be executed. -.PARAMETER Mono -Tells Cake to use the Mono scripting engine. -.PARAMETER SkipToolPackageRestore -Skips restoring of packages. -.PARAMETER ScriptArgs -Remaining arguments are added here. -.LINK -http://cakebuild.net -#> - -[CmdletBinding()] -Param( - [string]$Script = "setup.cake", - [string]$Target = "Default", - [ValidateSet("Release", "Debug")] - [string]$Configuration = "Release", - [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] - [string]$Verbosity = "Verbose", - [switch]$Experimental, - [Alias("DryRun","Noop")] - [switch]$WhatIf, - [switch]$Mono, - [switch]$SkipToolPackageRestore, - [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] - [string[]]$ScriptArgs -) - -[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null -function MD5HashFile([string] $filePath) -{ - if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf)) - { - return $null - } - - [System.IO.Stream] $file = $null; - [System.Security.Cryptography.MD5] $md5 = $null; - try - { - $md5 = [System.Security.Cryptography.MD5]::Create() - $file = [System.IO.File]::OpenRead($filePath) - return [System.BitConverter]::ToString($md5.ComputeHash($file)) - } - finally - { - if ($file -ne $null) - { - $file.Dispose() - } - } -} - -Write-Host "Preparing to run build script..." - -if(!$PSScriptRoot){ - $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent -} - -$TOOLS_DIR = Join-Path $PSScriptRoot "tools" -$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" -$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" -$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" -$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum" - -# Should we use mono? -$UseMono = ""; -if($Mono.IsPresent) { - Write-Verbose -Message "Using the Mono based scripting engine." - $UseMono = "-mono" -} - -# Should we use the new Roslyn? -$UseExperimental = ""; -if($Experimental.IsPresent -and !($Mono.IsPresent)) { - Write-Verbose -Message "Using experimental version of Roslyn." - $UseExperimental = "-experimental" -} - -# Is this a dry run? -$UseDryRun = ""; -if($WhatIf.IsPresent) { - $UseDryRun = "-dryrun" -} - -# Make sure tools folder exists -if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { - Write-Verbose -Message "Creating tools directory..." - New-Item -Path $TOOLS_DIR -Type directory | out-null -} - -# Make sure that packages.config exist. -if (!(Test-Path $PACKAGES_CONFIG)) { - Write-Verbose -Message "Downloading packages.config..." - try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { - Throw "Could not download packages.config." - } -} - -# Try find NuGet.exe in path if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Trying to find nuget.exe in PATH..." - $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } - $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 - if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { - Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." - $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName - } -} - -# Try download NuGet.exe if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Downloading NuGet.exe..." - try { - (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) - } catch { - Throw "Could not download NuGet.exe." - } -} - -# Save nuget.exe path to environment to be available to child processed -$ENV:NUGET_EXE = $NUGET_EXE - -# Restore tools from NuGet? -if(-Not $SkipToolPackageRestore.IsPresent) { - Push-Location - Set-Location $TOOLS_DIR - - # Check for changes in packages.config and remove installed tools if true. - [string] $md5Hash = MD5HashFile($PACKAGES_CONFIG) - if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or - ($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) { - Write-Verbose -Message "Missing or changed package.config hash..." - Remove-Item * -Recurse -Exclude packages.config,nuget.exe - } - - Write-Verbose -Message "Restoring tools from NuGet..." - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -PreRelease -OutputDirectory `"$TOOLS_DIR`" -Source https://www.myget.org/F/cake/api/v3/index.json" - - if ($LASTEXITCODE -ne 0) { - Throw "An error occured while restoring NuGet tools." - } - else - { - $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" - } - Write-Verbose -Message ($NuGetOutput | out-string) - Pop-Location -} - -# Make sure that Cake has been installed. -if (!(Test-Path $CAKE_EXE)) { - Throw "Could not find Cake.exe at $CAKE_EXE" -} - -# Start Cake -Write-Host "Running build script..." -Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" -exit $LASTEXITCODE \ No newline at end of file diff --git a/build.sh b/build.sh deleted file mode 100644 index a541ec1..0000000 --- a/build.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash -############################################################### -# This is the Cake bootstrapper script that is responsible for -# downloading Cake and all specified tools from NuGet. -############################################################### - -# Define directories. -SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -TOOLS_DIR=$SCRIPT_DIR/tools -NUGET_EXE=$TOOLS_DIR/nuget.exe -CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe - -# Define default arguments. -SCRIPT="setup.cake" -TARGET="Default" -CONFIGURATION="Release" -VERBOSITY="verbose" -DRYRUN= -SHOW_VERSION=false -SCRIPT_ARGUMENTS=() - -# Parse arguments. -for i in "$@"; do - case $1 in - -s|--script) SCRIPT="$2"; shift ;; - -t|--target) TARGET="$2"; shift ;; - -c|--configuration) CONFIGURATION="$2"; shift ;; - -v|--verbosity) VERBOSITY="$2"; shift ;; - -d|--dryrun) DRYRUN="-dryrun" ;; - --version) SHOW_VERSION=true ;; - --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; - *) SCRIPT_ARGUMENTS+=("$1") ;; - esac - shift -done - -# Make sure the tools folder exist. -if [ ! -d $TOOLS_DIR ]; then - mkdir $TOOLS_DIR -fi - -# Make sure that packages.config exist. -if [ ! -f $TOOLS_DIR/packages.config ]; then - echo "Downloading packages.config..." - curl -Lsfo $TOOLS_DIR/packages.config http://cakebuild.net/bootstrapper/packages - if [ $? -ne 0 ]; then - echo "An error occured while downloading packages.config." - exit 1 - fi -fi - -# Download NuGet if it does not exist. -if [ ! -f $NUGET_EXE ]; then - echo "Downloading NuGet..." - curl -Lsfo $NUGET_EXE https://dist.nuget.org/win-x86-commandline/latest/nuget.exe - if [ $? -ne 0 ]; then - echo "An error occured while downloading nuget.exe." - exit 1 - fi -fi - -# Restore tools from NuGet. -pushd $TOOLS_DIR >/dev/null -mono $NUGET_EXE install -ExcludeVersion -PreRelease -Source https://www.myget.org/F/cake/api/v3/index.json -if [ $? -ne 0 ]; then - echo "Could not restore NuGet packages." - exit 1 -fi -popd >/dev/null - -# Make sure that Cake has been installed. -if [ ! -f $CAKE_EXE ]; then - echo "Could not find Cake.exe at '$CAKE_EXE'." - exit 1 -fi - -# Start Cake -if $SHOW_VERSION; then - exec mono $CAKE_EXE -version -else - exec mono $CAKE_EXE $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" -fi diff --git a/build/GetBuildVersion.psm1 b/build/GetBuildVersion.psm1 new file mode 100644 index 0000000..e6d8867 --- /dev/null +++ b/build/GetBuildVersion.psm1 @@ -0,0 +1,36 @@ +# https://github.com/MADE-Apps/MADE.NET/blob/main/build/GetBuildVersion.psm1 + +Function GetBuildVersion { + Param ( + [string]$VersionString + ) + + # Process through regex + $VersionString -match "(?\d+)(\.(?\d+))?(\.(?\d+))?(\-(?
[0-9A-Za-z\-\.]+))?(\+(?\d+))?" | Out-Null
+
+    if ($matches -eq $null) {
+        return "1.0.0-build"
+    }
+
+    # Extract the build metadata
+    $BuildRevision = [uint64]$matches['build']
+    # Extract the pre-release tag
+    $PreReleaseTag = [string]$matches['pre']
+    # Extract the patch
+    $Patch = [uint64]$matches['patch']
+    # Extract the minor
+    $Minor = [uint64]$matches['minor']
+    # Extract the major
+    $Major = [uint64]$matches['major']
+
+    $Version = [string]$Major + '.' + [string]$Minor + '.' + [string]$Patch;
+    if ($PreReleaseTag -ne [string]::Empty) {
+        $Version = $Version + '-' + $PreReleaseTag
+    }
+
+    if ($BuildRevision -ne 0) {
+        $Version = $Version + '.' + [string]$BuildRevision
+    }
+
+    return $Version
+}
\ No newline at end of file
diff --git a/config.wyam b/config.wyam
deleted file mode 100644
index ec66293..0000000
--- a/config.wyam
+++ /dev/null
@@ -1 +0,0 @@
-System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
diff --git a/docs/input/_Bottom.cshtml b/docs/input/_Bottom.cshtml
deleted file mode 100644
index 1383a73..0000000
--- a/docs/input/_Bottom.cshtml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
diff --git a/docs/input/_Footer.cshtml b/docs/input/_Footer.cshtml
deleted file mode 100644
index 41d7206..0000000
--- a/docs/input/_Footer.cshtml
+++ /dev/null
@@ -1,5 +0,0 @@
-

- Copyright © BBT Software AG and contributors. -
- Website generated by Wyam -

diff --git a/docs/input/assets/css/override.less b/docs/input/assets/css/override.less deleted file mode 100644 index 74d8ed4..0000000 --- a/docs/input/assets/css/override.less +++ /dev/null @@ -1,122 +0,0 @@ -/* Control the margin for bootstrap alert boxes */ -.alert > p { - margin-top: 0px; -} - -/* Control the look and feel of the copy box applied to code sections */ -.btn-copy[disabled] .clippy { - opacity: .3; -} -pre .btn-copy { - -webkit-transition: opacity 0.3s ease-in-out; - -o-transition: opacity 0.3s ease-in-out; - transition: opacity 0.3s ease-in-out; - opacity: 0; - padding: 2px 6px; - float: right; -} -pre:hover .btn-copy { - opacity: 1; -} -.tooltipped { - position: relative -} -.tooltipped:after { - position: absolute; - z-index: 1000000; - display: none; - padding: 5px 8px; - font: normal normal 11px/1.5 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; - color: #fff; - text-align: center; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-wrap: break-word; - white-space: pre; - pointer-events: none; - content: attr(aria-label); - background: rgba(0, 0, 0, 0.8); - border-radius: 3px; - -webkit-font-smoothing: subpixel-antialiased -} -.tooltipped:before { - position: absolute; - z-index: 1000001; - display: none; - width: 0; - height: 0; - color: rgba(0, 0, 0, 0.8); - pointer-events: none; - content: ""; - border: 5px solid transparent -} -.tooltipped:hover:before, .tooltipped:hover:after, .tooltipped:active:before, .tooltipped:active:after, .tooltipped:focus:before, .tooltipped:focus:after { - display: inline-block; - text-decoration: none -} -.tooltipped-s:after, .tooltipped-se:after, .tooltipped-sw:after { - top: 100%; - right: 50%; - margin-top: 5px -} -.tooltipped-s:before, .tooltipped-se:before, .tooltipped-sw:before { - top: auto; - right: 50%; - bottom: -5px; - margin-right: -5px; - border-bottom-color: rgba(0, 0, 0, 0.8) -} - -@font-family-sans-serif: "Roboto", Helvetica, Arial, sans-serif; - -/* For Gitter and GitHub */ -.bottom-footer { - margin-bottom: 40px !important; // Make room for Gitter and GitHub buttons -} - -.gitter-open-chat-button { - background-color: #3c8dbc; - font-family: @font-family-sans-serif; - letter-spacing: normal; - right: 90px; -} - -.gitter-open-chat-button:focus, .gitter-open-chat-button:hover, -.github-button:focus, .github-button:hover, -{ - background-color: #4EABDD; - color: #fff; -} - -.gitter-chat-embed { - top: 49px; - border-top: 1px solid #000; - z-index: 10000; -} - -.github-button { - z-index: 100; - position: fixed; - bottom: 0px; - right: 240px; - padding: 1em 3em; - background-color: #367fa9; - border: 0; - border-top-left-radius: 0.5em; - border-top-right-radius: 0.5em; - font-family: sans-serif; - font-size: 9pt; - text-transform: uppercase; - text-align: center; - text-decoration: none; - cursor: pointer; - cursor: hand; - -webkit-transition: all .3s ease; - transition: all .3s ease; - color: #fff; - a, a:active, a:hover, a:focus { - color: #fff; - } -} \ No newline at end of file diff --git a/docs/input/assets/images/clippy.svg b/docs/input/assets/images/clippy.svg deleted file mode 100644 index e1b1703..0000000 --- a/docs/input/assets/images/clippy.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/input/assets/js/anchor.min.js b/docs/input/assets/js/anchor.min.js deleted file mode 100644 index 7f34489..0000000 --- a/docs/input/assets/js/anchor.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * AnchorJS - v3.2.2 - 2016-10-05 - * https://github.com/bryanbraun/anchorjs - * Copyright (c) 2016 Bryan Braun; Licensed MIT - */ -!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";function A(A){function e(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function t(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}function n(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style"),t=" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",n=" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",i=' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',o=" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }";e.className="anchorjs",e.appendChild(document.createTextNode("")),A=document.head.querySelector('[rel="stylesheet"], style'),void 0===A?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(t,e.sheet.cssRules.length),e.sheet.insertRule(n,e.sheet.cssRules.length),e.sheet.insertRule(o,e.sheet.cssRules.length),e.sheet.insertRule(i,e.sheet.cssRules.length)}}this.options=A||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var i,o,s,c,r,a,h,l,u,d,f,p,w=[];if(e(this.options),p=this.options.visible,"touch"===p&&(p=this.isTouchDevice()?"always":"hover"),A||(A="h1, h2, h3, h4, h5, h6"),i=t(A),0===i.length)return!1;for(n(),o=document.querySelectorAll("[id]"),s=[].map.call(o,function(A){return A.id}),r=0;r-1,t=A.lastChild&&(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return e||t||!1}}return A}); diff --git a/docs/input/assets/js/clipboard.min.js b/docs/input/assets/js/clipboard.min.js deleted file mode 100644 index 1d7c5d5..0000000 --- a/docs/input/assets/js/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v1.5.16 - * https://zenorocha.github.io/clipboard.js - * - * Licensed MIT © Zeno Rocha - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,i){function o(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var s=new Error("Cannot find module '"+a+"'");throw s.code="MODULE_NOT_FOUND",s}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,i)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var i=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.addEventListener("focus",window.scrollTo(0,i)),this.fakeElem.style.top=i+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof i)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=a.exports}}(this,function(e,t,n,i){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var s=o(t),u=o(n),f=o(i),d=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new s.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}]),t}(u.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}); \ No newline at end of file diff --git a/docs/input/docs/index.cshtml b/docs/input/docs/index.cshtml deleted file mode 100644 index 0610eb5..0000000 --- a/docs/input/docs/index.cshtml +++ /dev/null @@ -1,13 +0,0 @@ ---- -Title: Documentation ---- -@foreach(IDocument child in Model.DocumentList(Keys.Children).OrderBy(x => x.Get(DocsKeys.Order, 1000))) -{ -

@(child.String(Keys.Title))

- if(child.ContainsKey(DocsKeys.Description)) - { -

@Html.Raw(child.String(DocsKeys.Description))

- } - - @Html.Partial("_ChildPages", child) -} \ No newline at end of file diff --git a/docs/input/docs/usage/examples.md b/docs/input/docs/usage/examples.md deleted file mode 100644 index db9cd16..0000000 --- a/docs/input/docs/usage/examples.md +++ /dev/null @@ -1,16 +0,0 @@ -# RepositoryDescription - -To use the Azure DevOps URL parser you need to add the [TfsUrlParser NuGet package](https://www.nuget.org/packages/TfsUrlParser/). - -```csharp - var repositoryDescription = - new RepositoryDescription( - "http://myserver:8080/tfs/defaultcollection/myproject/_git/myrepository"); - - Console.WriteLine(repositoryDescription.ServerUrl); - Console.WriteLine(repositoryDescription.CollectionUrl); - Console.WriteLine(repositoryDescription.CollectionName); - Console.WriteLine(repositoryDescription.ProjectName); - Console.WriteLine(repositoryDescription.RepositoryUrl); - Console.WriteLine(repositoryDescription.RepositoryName); -``` diff --git a/docs/input/docs/usage/index.cshtml b/docs/input/docs/usage/index.cshtml deleted file mode 100644 index 429e280..0000000 --- a/docs/input/docs/usage/index.cshtml +++ /dev/null @@ -1,7 +0,0 @@ ---- -Order: 10 -Description: How to obtain, configure, and execute Azure DevOps URL parser. ---- -

@Html.Raw(Model.String(DocsKeys.Description))

- -@Html.Partial("_ChildPages") \ No newline at end of file diff --git a/docs/input/index.cshtml b/docs/input/index.cshtml deleted file mode 100644 index ba26e06..0000000 --- a/docs/input/index.cshtml +++ /dev/null @@ -1,13 +0,0 @@ ---- -Title: Azure DevOps URL parser -NoSidebar: true -NoContainer: false -NoGutter: true ---- - -
-

What is it?

-

- This NuGet package contains code for parsing Azure DevOps and Azure DevOps Server URLs -

-
\ No newline at end of file diff --git a/docs/packages.xml b/docs/packages.xml deleted file mode 100644 index d85bac4..0000000 --- a/docs/packages.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/nuspec/nuget/TfsUrlParser.nuspec b/nuspec/nuget/TfsUrlParser.nuspec index 1115b3b..5ba1551 100644 --- a/nuspec/nuget/TfsUrlParser.nuspec +++ b/nuspec/nuget/TfsUrlParser.nuspec @@ -8,11 +8,11 @@ bbtsoftware, pascalberger Provides a parser for Azure DevOps and Azure DevOps Server URLs. Provides a parser to get repository information from an Azure DevOps and Azure DevOps Server URLs. - https://github.com/bbtsoftware/TfsUrlParser/blob/develop/LICENSE + MIT https://github.com/bbtsoftware/TfsUrlParser/ https://raw.githubusercontent.com/bbtsoftware/TfsUrlParser/fdaa354eef80c05070c93ef14b6774abe7eeac73/nuspec/nuget/icon.png false - + Copyright © BBT Software AG AzureDevOps Git Parser https://github.com/bbtsoftware/TfsUrlParser/releases/tag/1.3.0 diff --git a/setup.cake b/setup.cake deleted file mode 100644 index c4b6f89..0000000 --- a/setup.cake +++ /dev/null @@ -1,25 +0,0 @@ -#load nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.Recipe&prerelease - -Environment.SetVariableNames(); - -BuildParameters.SetParameters( - context: Context, - buildSystem: BuildSystem, - sourceDirectoryPath: "./src", - title: "TfsUrlParser", - repositoryOwner: "bbtsoftware", - repositoryName: "TfsUrlParser", - appVeyorAccountName: "BBTSoftwareAG", - shouldPublishMyGet: false, - shouldRunCodecov: false); - -BuildParameters.PrintParameters(Context); - -ToolSettings.SetToolSettings( - context: Context, - dupFinderExcludePattern: new string[] { BuildParameters.RootDirectoryPath + "/src/TfsUrlParser.Tests/*.cs" }, - testCoverageFilter: "+[*]* -[xunit.*]* -[*.Tests]* ", - testCoverageExcludeByAttribute: "*.ExcludeFromCodeCoverage*", - testCoverageExcludeByFile: "*/*Designer.cs;*/*.g.cs;*/*.g.i.cs"); - -Build.RunDotNetCore(); diff --git a/src/TfsUrlParser.Tests/Properties/AssemblyInfo.cs b/src/TfsUrlParser.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index 16f9123..0000000 --- a/src/TfsUrlParser.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("6d16103d-8d2a-4e00-862a-2ad3c00e2883")] diff --git a/src/TfsUrlParser.Tests/TfsUrlParser.Tests.csproj b/src/TfsUrlParser.Tests/TfsUrlParser.Tests.csproj index 100cc4b..95bec50 100644 --- a/src/TfsUrlParser.Tests/TfsUrlParser.Tests.csproj +++ b/src/TfsUrlParser.Tests/TfsUrlParser.Tests.csproj @@ -1,6 +1,9 @@  - netcoreapp2.0 + Net6.0 + + + false TfsUrlParser BBT Software AG @@ -10,19 +13,24 @@ ..\TfsUrlParser.Tests.ruleset bin\$(Configuration)\ + full pdbonly + - - - + + + + all + + diff --git a/src/TfsUrlParser.sln b/src/TfsUrlParser.sln index ee88db8..c320049 100644 --- a/src/TfsUrlParser.sln +++ b/src/TfsUrlParser.sln @@ -8,11 +8,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TfsUrlParser.Tests", "TfsUrlParser.Tests\TfsUrlParser.Tests.csproj", "{6D16103D-8D2A-4E00-862A-2AD3C00E2883}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{CF561A03-1A80-42E3-BA70-B928138A6C2B}" - ProjectSection(SolutionItems) = preProject - ..\build.ps1 = ..\build.ps1 - ..\build.sh = ..\build.sh - ..\setup.cake = ..\setup.cake - EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nuspec", "nuspec", "{FA42AED9-1A9A-4030-87D6-C89FECA5533C}" ProjectSection(SolutionItems) = preProject diff --git a/src/TfsUrlParser/Properties/AssemblyInfo.cs b/src/TfsUrlParser/Properties/AssemblyInfo.cs deleted file mode 100644 index 42de43d..0000000 --- a/src/TfsUrlParser/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("0e778b55-ffc8-43d3-904c-a44797a5086c")] - -[assembly: CLSCompliant(true)] -[assembly: InternalsVisibleTo("TfsUrlParser.Tests")] \ No newline at end of file diff --git a/src/TfsUrlParser/RepositoryDescription.cs b/src/TfsUrlParser/RepositoryDescription.cs index d0b7bab..fba203f 100644 --- a/src/TfsUrlParser/RepositoryDescription.cs +++ b/src/TfsUrlParser/RepositoryDescription.cs @@ -38,7 +38,7 @@ public RepositoryDescription(Uri repoUrl) var splitFirstPart = splitPath[0].Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); // visualstudio.com URLs don't contain the collection in the path - if (splitFirstPart.Length == 1 && this.ServerUrl.Host.EndsWith("visualstudio.com")) + if (splitFirstPart.Length == 1 && this.ServerUrl.Host.EndsWith("visualstudio.com", StringComparison.OrdinalIgnoreCase)) { this.CollectionName = "DefaultCollection"; this.CollectionUrl = this.ServerUrl; @@ -113,7 +113,7 @@ private static Uri ConvertToSupportedUriScheme(Uri repoUrl) { Scheme = Uri.UriSchemeHttps, UserName = string.Empty, - Password = string.Empty + Password = string.Empty, }; return uriBuilder.Uri; } diff --git a/src/TfsUrlParser/TfsUrlParser.csproj b/src/TfsUrlParser/TfsUrlParser.csproj index ef2bc4d..f344adb 100644 --- a/src/TfsUrlParser/TfsUrlParser.csproj +++ b/src/TfsUrlParser/TfsUrlParser.csproj @@ -1,6 +1,9 @@  netstandard2.0 + + + TfsUrlParser BBT Software AG TfsUrlParser @@ -10,19 +13,24 @@ bin\$(Configuration)\TfsUrlParser.XML bin\$(Configuration)\ true + true + + + + all + + + full + pdbonly - - - all - - - all - - + + + AllEnabledByDefault + \ No newline at end of file diff --git a/tools/packages.config b/tools/packages.config deleted file mode 100644 index 878c59d..0000000 --- a/tools/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file