From d654cd09d5595626496edf9f0ff22eeea0de72ec Mon Sep 17 00:00:00 2001 From: Lucian Muresan Date: Mon, 4 May 2026 16:02:43 +0200 Subject: [PATCH 1/7] Added fork-specific build.cake targets for generating scoop and WinGet manifests, wrappr script needed for WinGet, prepared README.md and NEXT.md for a fork release --- .github/workflows/release.yml | 8 +- README.md | 37 ++- doc/release-notes/NEXT.md | 37 ++- src/GitTfs/Commands/Help.cs | 4 +- src/build.cake | 484 +++++++++++++++++++++++++++------- src/build/git-tfs.cmd | 6 + 6 files changed, 455 insertions(+), 121 deletions(-) create mode 100644 src/build/git-tfs.cmd diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1cc88885..b55afb8db 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,6 +13,7 @@ jobs: permissions: contents: write + packages: write defaults: run: @@ -20,7 +21,7 @@ jobs: env: gitHubUserAccount: ${{ github.repository_owner }} - gitHubToken: ${{ secrets.GITHUB_TOKEN }} + gitHubToken: ${{ github.token }} FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true ENABLE_CHOCO_PUSH: false @@ -34,7 +35,10 @@ jobs: run: | ./build.ps1 ` -Target AppVeyorRelease ` - -Configuration Release + -Configuration Release ` + --isDryRun=false ` + --gitHubOwner=${{ github.repository_owner }} ` + --gitHubRepository=git-tfs - name: Upload release artifacts uses: actions/upload-artifact@v4 diff --git a/README.md b/README.md index e8a2771c8..db8c3a163 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,42 @@ ## Introduction -[git-tfs](http://git-tfs.com/) is a two-way bridge between TFS (Team Foundation Server) and git, similar to git-svn. +**git-tfs-lfs** is a community-maintained fork of [git-tfs](http://git-tfs.com/) with **full Git LFS support**. + +git-tfs is a two-way bridge between TFS (Team Foundation Server) and git, similar to git-svn. It fetches TFS commits into a git repository, and lets you push your updates back to TFS. -[![git-tfs version](https://img.shields.io/github/release/git-tfs/git-tfs.svg?label=Latest%20Version:)](https://github.com/git-tfs/git-tfs/releases). See the [change history](https://github.com/git-tfs/git-tfs/releases) for details and download. +### What's New in This Fork + +- **Full Git LFS awareness** via filter-process protocol - LFS files are properly handled from initial TFVC clone +- Updated dependencies (libgit2sharp 0.31, StructureMap 4.7.1, xunit 2.7) +- Support for Visual Studio 2019 and 2022 only (VS2015/2017 support dropped) + +### Upstream Status + +This is a fork of the [original git-tfs project](https://github.com/git-tfs/git-tfs) which has been largely dormant since 2024. The upstream maintainers are no longer active TFS users and the project is not actively maintained. This fork aims to maintain the project a little longer, with focus on LFS support and modern dependency updates. If you're having problems, check out the [troubleshooting](doc/TROUBLESHOOTING.md) page. And read [how to report an issue](doc/reporting-issues.md), before doing so ;) -## We need your help +## Get git-tfs-lfs -This project is no more **actively** maintained because we are no more users of TFS. -Thus being very useful, git-tfs is not exempt of not supported use cases. -If you encounter something missing or a problem, please contribute, we will be pleased to help you. +To get a stable version: -And remember: +* Download a binary from the [releases page](https://github.com/lucianm/git-tfs/releases) +* Using Scoop: `scoop install gittfs-lfs` (once the bucket PR is merged) +* Using WinGet: `winget install LucianM.GitTfsLfs` (once the package is approved) ->The fastest way to get an issue fixed is to submit a PR that fixes it. +### Original Upstream Version ->The slowest way to get it fixed is to hope someone else will fix it. +The original git-tfs is available at: +* [Upstream releases](https://github.com/git-tfs/git-tfs/releases) +* Using Chocolatey: `choco install gittfs` - installs the [upstream Chocolatey package](http://chocolatey.org/packages/gittfs) -## Get git-tfs +## Contributing -To get a stable version: +Contributions are welcome! Please submit PRs for bug fixes, features, or improvements. -* Download a binary. Find it on the [release page](https://github.com/git-tfs/git-tfs/releases), -* Using Chocolatey. If [Chocolatey](http://chocolatey.org/) is already installed on your computer, run `choco install gittfs` to install the [Chocolatey package](http://chocolatey.org/packages/gittfs) +>The fastest way to get an issue fixed is to submit a PR that fixes it. To get a development version diff --git a/doc/release-notes/NEXT.md b/doc/release-notes/NEXT.md index d5f525dd7..bb3525530 100644 --- a/doc/release-notes/NEXT.md +++ b/doc/release-notes/NEXT.md @@ -1,4 +1,37 @@ +# git-tfs-lfs - Initial Community Fork with Full LFS Support + +Community-maintained fork of git-tfs with full Git LFS awareness and updated dependencies. + +## Full Git LFS support + +Implemented complete Git LFS awareness using the Git filter-process protocol. + +LFS files are now handled correctly directly from the initial TFVC clone, including: + +* automatic smudge/clean operations, +* transparent pointer-file handling, +* compatibility with standard git-lfs, +* support during fetch and checkout operations. + +## Improvements + +* Updated LibGit2Sharp to v0.31 +* Updated StructureMap to v4.7.1 +* Updated xUnit tooling and test infrastructure +* Refreshed various dependencies for security and compatibility +* Added support for relative paths in .git redirection files + +## Breaking Changes + +* **Dropped Visual Studio 2015 support** - VS2015 project removed from solution +* **Dropped Visual Studio 2017 support** - VS2017 project removed from solution +* Minimum supported Visual Studio versions are now VS2019 and VS2022 + +## Bug Fixes (from upstream) + * fix: read/write of `description` in bare repos ( #1487 by bramborman ) -* chore: target .net v4.8 ( #1490 by @pmiossec ) -* chore: Update libgit2sharp to v0.30 ( #1492 by @pmiossec ) * Fix handling of renamed branches for clone/fetch ( #1493 by @dh2i-sam ) + +## Notes + +This fork maintains full backward compatibility with git-tfs repositories while adding comprehensive LFS support. The LFS filter implementation is based on the Git pkt-line protocol and integrates directly with the local git-lfs installation for all filter operations. diff --git a/src/GitTfs/Commands/Help.cs b/src/GitTfs/Commands/Help.cs index 2851c54f5..c22ad711f 100644 --- a/src/GitTfs/Commands/Help.cs +++ b/src/GitTfs/Commands/Help.cs @@ -61,7 +61,7 @@ public int Run() Trace.TraceInformation(command); } Trace.TraceInformation(" (use 'git-tfs help [command]' or 'git-tfs [command] --help' for more information)"); - Trace.TraceInformation("\nFind more help in our online help : https://github.com/git-tfs/git-tfs"); + Trace.TraceInformation("\nFind more help in our online help : https://github.com/lucianm/git-tfs"); return GitTfsExitCodes.Help; } @@ -78,7 +78,7 @@ public int Run(GitTfsCommand command) command.GetAllOptions(_container).WriteOptionDescriptions(writer); Trace.TraceInformation(writer.ToString()); - Trace.TraceInformation("\nFind more help in our online help : https://github.com/git-tfs/git-tfs/blob/master/doc/commands/" + GetCommandName(command) + ".md"); + Trace.TraceInformation("\nFind more help in our online help : https://github.com/lucianm/git-tfs/blob/master/doc/commands/" + GetCommandName(command) + ".md"); return GitTfsExitCodes.Help; } diff --git a/src/build.cake b/src/build.cake index 32da35a56..649b1a4e6 100644 --- a/src/build.cake +++ b/src/build.cake @@ -9,7 +9,7 @@ ////////////////////////////////////////////////////////////////////// readonly var Target = Argument("target", "Default"); readonly var Configuration = Argument("configuration", "Debug"); -var runInDryRun = Argument("isDryRun", true); +var runInDryRun = Argument("isDryRun", false); readonly var GitHubOwner = Argument("gitHubOwner", "git-tfs"); readonly var GitHubRepository = Argument("gitHubRepository", "git-tfs"); readonly var IdGitHubReleaseToDelete = Argument("idGitHubReleaseToDelete", -1); @@ -25,9 +25,14 @@ const string PathToSln = ApplicationPath + ".sln"; const string TargetFramework = "net48"; //due to new dotnet csproj format readonly var OutDir = "bin/" + Configuration + "/" + TargetFramework + "/"; const string buildAssetPath = @".\.build\"; -const string DownloadUrlTemplate ="https://github.com/git-tfs/git-tfs/releases/download/v{0}/"; +const string _downloadUrlBase = "https://github.com/lucianm/git-tfs"; +const string DownloadUrlTemplate = _downloadUrlBase + "/releases/download/v{0}/"; +// Fork-specific identifiers (empty for upstream) +const string _forkOwner = "lucianm"; // "git-tfs" for upstream +const string _forkPublisher = "LucianM"; // "GitTfs" for upstream +const string _forkPackageSuffix = "Lfs"; // "" for upstream string ReleaseNotesPath = @"..\doc\release-notes\NEXT.md"; -const string ChocolateyBuildDir = buildAssetPath + "choc"; +const string ChocolateyBuildDir = buildAssetPath + "chocolatey"; readonly var OutputDirectory = ApplicationPath + "/" + OutDir; const string TestProjectName = "GitTfsTest"; @@ -42,6 +47,15 @@ string _releaseVersion; string _sha1; string _appVeyorBuildVersion; bool _buildAllVersion = (Target == "AppVeyorRelease"); +Cake.Common.Security.FileHash _sha256; +string _shaFilePath; +string _scoopManifestPath; +string _scoopManifestZip; +string _wingetVersionPath; +string _wingetInstallerPath; +string _wingetLocalePath; +string _wingetManifestZip; +string _chocolateyManifestZip; ////////////////////////////////////////////////////////////////////// // TASKS @@ -75,60 +89,24 @@ Task("DryRun").Description("Set the dry-run flag") runInDryRun = true; }); -Task("TagVersion").Description("Handle release note and tag the new version") +Task("TagVersion").Description("Validate release notes exist for this version") .Does(() => { var version = GitVersion(); - string nextVersion; - string tag; - if(!IsMinorRelease) + var expectedReleaseNotePath = @"..\doc\release-notes\v" + version.MajorMinorPatch + ".md"; + + if(!FileExists(expectedReleaseNotePath)) { - var tagVersion = version.Major + "." + (version.Minor + 1); - tag = "v" + tagVersion; - nextVersion = tagVersion + ".0"; - } - else - { - nextVersion = version.Major + "." + version.Minor + "." + version.CommitsSinceVersionSource; - tag = "v" + nextVersion; - } - Information("Next version will be:" + nextVersion); - - if(!runInDryRun) - { - Information("Creating release tag..."); - var githubAccount = GetGithubUserAccount(); - var githubToken = GetGithubAuthToken(); - if(FileExists(ReleaseNotesPath)) - { - var newReleaseNotePath = @"..\doc\release-notes\v" + nextVersion + ".md"; - MoveFile(ReleaseNotesPath, newReleaseNotePath); - - GitAdd("..", newReleaseNotePath); - GitRemove("..", false, ReleaseNotesPath); - var releaseNoteCommit = GitCommit("..", @"Git-tfs release bot", "no-reply@git-tfs.com", "Prepare release " + tag); - Information("Release note commit created:" + releaseNoteCommit.Sha); - - ReleaseNotesPath = newReleaseNotePath; - GitPush("..", githubAccount, githubToken, "master"); - } - if(!IsMinorRelease) - { - GitTag("..", tag); - GitPushRef("..", githubAccount, githubToken, "origin", "refs/tags/" + tag); - } - } - else - { - if(!IsMinorRelease) - { - Information("[DryRun] Should create the release tag: " + tag); - } - else - { - Information("[DryRun] Minor release => Should not create a release tag"); - } + throw new Exception( + $"Release notes file not found: {expectedReleaseNotePath}\n" + + "Please create the release notes file before tagging:\n" + + " 1. Copy NEXT.md to v" + version.MajorMinorPatch + ".md\n" + + " 2. Commit the new file\n" + + " 3. Create and push the tag: git tag v" + version.MajorMinorPatch + " && git push --follow-tags" + ); } + + Information($"Found release notes: {expectedReleaseNotePath}"); }); Task("Clean").Description("Clean the working directory") @@ -153,8 +131,9 @@ Task("Version").Description("Get the version using GitVersion") .Does(() => { var version = GitVersion(); - _semanticVersionShort = version.Major + "." + version.Minor + "." + version.CommitsSinceVersionSource; - _semanticVersionLong = _semanticVersionShort + "+" + version.Sha + "." + version.BranchName; + // Use GitVersion's SemVer for better tagged commit handling + _semanticVersionShort = version.MajorMinorPatch; + _semanticVersionLong = version.InformationalVersion; Information("Semantic version (short):" + _semanticVersionShort); Information("Semantic version (long ):" + _semanticVersionLong); @@ -162,16 +141,25 @@ Task("Version").Description("Get the version using GitVersion") var normalizedBranchName = NormalizeBrancheName(version.BranchName); _sha1 = version.Sha; var shortSha1 = version.Sha.Substring(0,8); - var postFix = (version.BranchName == "master") ? string.Empty : "-" + shortSha1 + "." + normalizedBranchName; + // For tagged releases (CommitsSinceVersionSource == 0) or master branch, use clean version without postfix + var isTaggedRelease = version.CommitsSinceVersionSource == 0 || version.BranchName == "master" || version.BranchName.StartsWith("tags/"); + var postFix = isTaggedRelease ? string.Empty : "-" + shortSha1 + "." + normalizedBranchName; _zipFilename = string.Format(ZipFileTemplate, _semanticVersionShort + postFix); _zipFilePath = System.IO.Path.Combine(buildAssetPath, _zipFilename); + _shaFilePath = _zipFilePath + ".sha256"; _downloadUrl = string.Format(DownloadUrlTemplate, _semanticVersionShort) + _zipFilename; _releaseVersion = "v" + _semanticVersionShort; + + // Derive release notes path from version (tag-driven releases) + ReleaseNotesPath = @"..\doc\release-notes\" + _releaseVersion + ".md"; + Information("Release notes path: " + ReleaseNotesPath); + // Guard against non-AppVeyor environments + var buildNumber = EnvironmentVariable("APPVEYOR_BUILD_NUMBER") ?? "0"; _appVeyorBuildVersion = _semanticVersionShort + ((version.BranchName == "master") ? string.Empty : "+" + shortSha1 + "." + normalizedBranchName) - + "." + EnvironmentVariable("APPVEYOR_BUILD_NUMBER"); + + "." + buildNumber; }); void UpdateAppVeyorBuildNumber() @@ -325,22 +313,30 @@ Task("Package").Description("Generate the release zip file") CopyDirectory(@"..\doc", OutputDirectory + @"\doc"); CopyFiles(new[] {@"..\README.md", @"..\LICENSE", @"..\NOTICE"}, OutputDirectory); - CopyFiles(new[] {@".\build\CorFlags.exe", @".\build\enable_checkin_policies_support.bat", @".\build\disable_checkin_policies_support.bat"}, OutputDirectory); + CopyFiles(new[] {@".\build\CorFlags.exe", @".\build\enable_checkin_policies_support.bat", @".\build\disable_checkin_policies_support.bat", @".\build\git-tfs.cmd"}, OutputDirectory); DeleteFiles(OutputDirectory + @"\**\*.pdb"); //Create the zip Zip(OutputDirectory, _zipFilePath); + + // calculate sha256 hash, store in variable and file artifact, usable in Choco, Scoop, WinGet... + _sha256 = CalculateFileHash(_zipFilePath); + System.IO.File.WriteAllText(_shaFilePath, $"{_sha256.ToHex()} {_zipFilename}"); + Information($"Hash ({_sha256.Algorithm:G}):" + _sha256.ToHex()); + if(!BuildSystem.IsLocalBuild) { if(BuildSystem.IsRunningOnAppVeyor) { Information("Upload artifacts to AppVeyor..."); BuildSystem.AppVeyor.UploadArtifact(_zipFilePath); + BuildSystem.AppVeyor.UploadArtifact(_shaFilePath); } if(BuildSystem.IsRunningOnAzurePipelinesHosted) { Information("Upload artifacts to VSTS..."); BuildSystem.AzurePipelines.Commands.UploadArtifact("install", _zipFilePath, _zipFilename); + BuildSystem.AzurePipelines.Commands.UploadArtifact("install", _shaFilePath, System.IO.Path.GetFileName(_shaFilePath)); } } }); @@ -435,14 +431,197 @@ string GetGithubAuthToken() return token; } - return ReadToken("GitHub", @"^ghp_[\d\w]{36}$"); + return ReadToken("GitHub", @"^(ghp_|github_pat_).+"); } string ReadReleaseNotes() { if(!FileExists(ReleaseNotesPath)) + { + Warning($"Release notes file not found: {ReleaseNotesPath}"); return string.Empty; - return System.IO.File.ReadAllText(ReleaseNotesPath); + } + var notes = System.IO.File.ReadAllText(ReleaseNotesPath); + Information($"Loaded release notes from: {ReleaseNotesPath}"); + return notes; +} + +void GenerateScoopManifest() +{ + Information("Generating Scoop manifest..."); + + var packageSuffix = string.IsNullOrEmpty(_forkPackageSuffix) ? "" : "-" + _forkPackageSuffix.ToLower(); + var description = string.IsNullOrEmpty(_forkPackageSuffix) + ? "A Git/TFS bridge, similar to git-svn." + : "A Git/TFS bridge with full Git LFS support, similar to git-svn."; + + // Build manifest matching upstream Scoop format + var scoopManifest = new + { + version = _semanticVersionShort, + description = description, + homepage = _downloadUrlBase, + license = "Apache-2.0", + depends = "git", + url = _downloadUrl, + hash = _sha256.ToHex().ToLower(), + bin = "git-tfs.exe", + checkver = new + { + github = _downloadUrlBase + }, + autoupdate = new + { + url = $"{_downloadUrlBase}/releases/download/v$version/GitTfs-$version.zip" + } + }; + + var scoopDir = System.IO.Path.Combine(buildAssetPath, "scoop"); + EnsureDirectoryExists(scoopDir); + CleanDirectory(scoopDir); + + _scoopManifestPath = System.IO.Path.Combine(scoopDir, $"git-tfs{packageSuffix}.json"); + var json = Newtonsoft.Json.JsonConvert.SerializeObject(scoopManifest, Newtonsoft.Json.Formatting.Indented); + System.IO.File.WriteAllText(_scoopManifestPath, json + Environment.NewLine); + Information($"Scoop manifest created: {_scoopManifestPath}"); + + // Zip the Scoop manifest + _scoopManifestZip = System.IO.Path.Combine(buildAssetPath, "manifest.scoop.zip"); + Zip(scoopDir, _scoopManifestZip); + Information($"Scoop manifest zipped: {_scoopManifestZip}"); + + if(BuildSystem.IsRunningOnAppVeyor) + { + Information("Uploading Scoop manifest as AppVeyor artifact..."); + BuildSystem.AppVeyor.UploadArtifact(_scoopManifestZip); + } + if(BuildSystem.IsRunningOnAzurePipelinesHosted) + { + Information("Uploading Scoop manifest as Azure Pipelines artifact..."); + BuildSystem.AzurePipelines.Commands.UploadArtifact("install", _scoopManifestZip, "manifest.scoop.zip"); + } +} + +void GenerateWinGetManifest() +{ + Information("Generating WinGet manifest..."); + + // WinGet uses YAML manifests with three files: version, installer, and locale + // Format: manifests///// + var wingetBaseDir = System.IO.Path.Combine(buildAssetPath, "winget"); + var publisher = string.IsNullOrEmpty(_forkPublisher) ? "GitTfs" : _forkPublisher; + var packageId = $"{publisher}.GitTfs{_forkPackageSuffix}"; + var packageName = string.IsNullOrEmpty(_forkPackageSuffix) ? "git-tfs" : $"git-tfs-{_forkPackageSuffix.ToLower()}"; + + // Create versioned directory structure + var wingetDir = System.IO.Path.Combine(wingetBaseDir, _semanticVersionShort); + EnsureDirectoryExists(wingetDir); + CleanDirectory(wingetDir); + + // Version manifest + var versionManifest = $@"# Created using Cake Build +# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.12.0.schema.json + +PackageIdentifier: {packageId} +PackageVersion: {_semanticVersionShort} +DefaultLocale: en-US +ManifestType: version +ManifestVersion: 1.12.0 +"; + _wingetVersionPath = System.IO.Path.Combine(wingetDir, $"{packageId}.yaml"); + System.IO.File.WriteAllText(_wingetVersionPath, versionManifest); + + // Installer manifest + var installerManifest = $@"# Created using Cake Build +# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.12.0.schema.json + +PackageIdentifier: {packageId} +PackageVersion: {_semanticVersionShort} +InstallerType: zip +Commands: +- git-tfs +Installers: +- Architecture: x64 + NestedInstallerType: portable + NestedInstallerFiles: + - RelativeFilePath: git-tfs.cmd + PortableCommandAlias: git-tfs + InstallerUrl: {_downloadUrl} + InstallerSha256: {_sha256.ToHex()} + Dependencies: + PackageDependencies: + - PackageIdentifier: Git.Git +ManifestType: installer +ManifestVersion: 1.12.0 +"; + _wingetInstallerPath = System.IO.Path.Combine(wingetDir, $"{packageId}.installer.yaml"); + System.IO.File.WriteAllText(_wingetInstallerPath, installerManifest); + + // Locale manifest + var releaseNotes = ReadReleaseNotes(); + if(string.IsNullOrEmpty(releaseNotes)) + { + releaseNotes = $"See {_downloadUrlBase}/releases/tag/v{_semanticVersionShort}"; + } + // WinGet schema 1.12.0 allows up to 10000 characters for ReleaseNotes + if(releaseNotes.Length > 10000) + { + releaseNotes = releaseNotes.Substring(0, 9997) + "..."; + } + // Escape special characters for YAML string formatting + releaseNotes = releaseNotes.Replace("\\", "\\\\").Replace("\"", "\\\""); + + var publisherName = string.IsNullOrEmpty(_forkPublisher) ? "git-tfs contributors" : "Lucian Muresan"; + var description = string.IsNullOrEmpty(_forkPackageSuffix) + ? "git-tfs is a two-way bridge between TFS/Azure DevOps and Git, allowing you to work with a Git repository while interacting with TFS." + : "git-tfs is a two-way bridge between TFS/Azure DevOps and Git, allowing you to work with a Git repository while interacting with TFS. This fork includes full Git LFS awareness via filter-process protocol, supporting LFS right from cloning from TFVC."; + + var localeManifest = $@"# Created using Cake Build +# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.12.0.schema.json + +PackageIdentifier: {packageId} +PackageVersion: {_semanticVersionShort} +PackageLocale: en-US +Publisher: {publisherName} +PublisherUrl: {_downloadUrlBase} +PackageName: {packageName} +PackageUrl: {_downloadUrlBase} +License: Apache-2.0 +LicenseUrl: {_downloadUrlBase}/blob/master/LICENSE +ShortDescription: A Git/TFS bridge with full Git LFS support +Description: {description} +Tags: +- git +- tfs +- version-control +- azure-devops +- lfs +- git-lfs +ReleaseNotes: ""{releaseNotes}"" +ReleaseNotesUrl: {_downloadUrlBase}/releases/tag/v{_semanticVersionShort} +ManifestType: defaultLocale +ManifestVersion: 1.12.0 +"; + _wingetLocalePath = System.IO.Path.Combine(wingetDir, $"{packageId}.locale.en-US.yaml"); + System.IO.File.WriteAllText(_wingetLocalePath, localeManifest); + + Information($"WinGet manifests created in: {wingetDir}"); + + // Zip the WinGet manifests + _wingetManifestZip = System.IO.Path.Combine(buildAssetPath, "manifest.winget.zip"); + Zip(wingetDir, _wingetManifestZip); + Information($"WinGet manifests zipped: {_wingetManifestZip}"); + + if(BuildSystem.IsRunningOnAppVeyor) + { + Information("Uploading WinGet manifest as AppVeyor artifact..."); + BuildSystem.AppVeyor.UploadArtifact(_wingetManifestZip); + } + if(BuildSystem.IsRunningOnAzurePipelinesHosted) + { + Information("Uploading WinGet manifest as Azure Pipelines artifact..."); + BuildSystem.AzurePipelines.Commands.UploadArtifact("install", _wingetManifestZip, "manifest.winget.zip"); + } } Octokit.GitHubClient GetGithubClient() @@ -487,10 +666,8 @@ environmentVariables: { httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", appVeyorToken); httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); - var taskTriggerRelease = httpClient.PostAsync("https://ci.appveyor.com/api/builds", - new System.Net.Http.StringContent(content, System.Text.Encoding.UTF8, "application/json")); - taskTriggerRelease.Wait(); - var httpResponseMessage = taskTriggerRelease.Result; + var httpResponseMessage = httpClient.PostAsync("https://ci.appveyor.com/api/builds", + new System.Net.Http.StringContent(content, System.Text.Encoding.UTF8, "application/json")).GetAwaiter().GetResult(); if(httpResponseMessage.IsSuccessStatusCode) { Information("Release build successfully triggered."); @@ -503,6 +680,7 @@ environmentVariables: { Task("CreateGithubRelease").Description("Create a GitHub release") .IsDependentOn("Package") + .IsDependentOn("GenerateDistributionChannelArtifacts") .WithCriteria(!runInDryRun) .Does(() => { @@ -512,22 +690,66 @@ Task("CreateGithubRelease").Description("Create a GitHub release") var releaseNotes = ReadReleaseNotes(); - releaseNotes += Environment.NewLine + "![Git-Tfs " + _releaseVersion + " download count](https://img.shields.io/github/downloads/git-tfs/git-tfs/" + _releaseVersion + "/total.svg)"; - - var newRelease = new Octokit.NewRelease(_releaseVersion); - newRelease.Name = _releaseVersion; - newRelease.Body = releaseNotes; - newRelease.Draft = false; - newRelease.Prerelease = false; - newRelease.TargetCommitish = _sha1; + releaseNotes += Environment.NewLine + "![Git-Tfs " + _releaseVersion + " download count](https://img.shields.io/github/downloads/" + _forkOwner + "/git-tfs/" + _releaseVersion + "/total.svg)"; - var taskCreateRelease = client.Repository.Release.Create(GitHubOwner, GitHubRepository, newRelease); - taskCreateRelease.Wait(); - var gitHubRelease = taskCreateRelease.Result; - Information("Github Release created. Id:" + gitHubRelease.Id); + // Check if release already exists (for GitHub Actions re-runs) + // Use GetAll and filter by TagName for maximum compatibility + Octokit.Release gitHubRelease = null; + try + { + var allReleases = client.Repository.Release.GetAll(GitHubOwner, GitHubRepository).GetAwaiter().GetResult(); + gitHubRelease = allReleases.FirstOrDefault(r => r.TagName == _releaseVersion); + + if(gitHubRelease != null) + { + Information($"Github Release '{_releaseVersion}' already exists (Id: {gitHubRelease.Id}). Updating..."); + + try + { + // Update existing release + var releaseUpdate = gitHubRelease.ToUpdate(); + releaseUpdate.Body = releaseNotes; + releaseUpdate.Name = _releaseVersion; + releaseUpdate.TargetCommitish = _sha1; + + gitHubRelease = client.Repository.Release.Edit(GitHubOwner, GitHubRepository, gitHubRelease.Id, releaseUpdate).GetAwaiter().GetResult(); + } + catch (Octokit.ApiException ex) + { + throw new Exception($"Failed to update GitHub release '{_releaseVersion}' (Id: {gitHubRelease.Id}): {ex.StatusCode} {ex.Message}", ex); + } + } + else + { + // Release doesn't exist, create it + Information($"Creating new Github Release '{_releaseVersion}'..."); + + try + { + var newRelease = new Octokit.NewRelease(_releaseVersion); + newRelease.Name = _releaseVersion; + newRelease.Body = releaseNotes; + newRelease.Draft = false; + newRelease.Prerelease = false; + newRelease.TargetCommitish = _sha1; + + gitHubRelease = client.Repository.Release.Create(GitHubOwner, GitHubRepository, newRelease).GetAwaiter().GetResult(); + Information("Github Release created. Id:" + gitHubRelease.Id); + } + catch (Octokit.ApiException ex) + { + throw new Exception($"Failed to create GitHub release '{_releaseVersion}': {ex.StatusCode} {ex.Message}", ex); + } + } + } + catch (System.Exception ex) when (!(ex is Octokit.ApiException)) + { + throw new Exception("Failed to create or update GitHub release: " + ex.Message, ex); + } + Information("If needed, delete the Github Release with the command:"); Information(@".\tools\Cake\Cake.exe build.cake -target=DeleteRelease -idGitHubReleaseToDelete="+ gitHubRelease.Id); - UploadReleaseAsset(client, gitHubRelease); + UploadReleaseAssets(client, gitHubRelease); }); Task("DeleteRelease").Description("Delete a (broken) GitHub release") @@ -536,30 +758,72 @@ Task("DeleteRelease").Description("Delete a (broken) GitHub release") { Information("Deleting release '" + IdGitHubReleaseToDelete +"'..."); var client = GetGithubClient(); - var taskDeleteRelease = client.Repository.Release.Delete(GitHubOwner, GitHubRepository, IdGitHubReleaseToDelete); - taskDeleteRelease.Wait(); + client.Repository.Release.Delete(GitHubOwner, GitHubRepository, IdGitHubReleaseToDelete).GetAwaiter().GetResult(); }); -void UploadReleaseAsset(Octokit.GitHubClient client, Octokit.Release release) +void UploadReleaseAssets(Octokit.GitHubClient client, Octokit.Release release) { - Information("Uploading asset..."); - var archiveContents = System.IO.File.OpenRead(_zipFilePath); - var assetUpload = new Octokit.ReleaseAssetUpload() - { - FileName = _zipFilename, - ContentType = "application/zip", - RawData = archiveContents + Information("Uploading release assets..."); + + // Get fresh asset list for idempotent uploads + var existingAssets = client.Repository.Release.GetAllAssets(GitHubOwner, GitHubRepository, release.Id).GetAwaiter().GetResult(); + + // Helper function to upload a single asset + Action uploadAsset = (filePath, contentType) => { + var fileName = System.IO.Path.GetFileName(filePath); + + // Check if asset already exists and delete it + var existingAsset = existingAssets.FirstOrDefault(a => a.Name == fileName); + if(existingAsset != null) + { + Information($"Asset '{fileName}' already exists. Deleting old version..."); + try + { + client.Repository.Release.DeleteAsset(GitHubOwner, GitHubRepository, existingAsset.Id).GetAwaiter().GetResult(); + } + catch (Octokit.ApiException ex) + { + Warning($"Failed to delete existing asset '{fileName}': {ex.StatusCode} {ex.Message}"); + // Continue anyway, upload may still succeed + } + } + + Information($"Uploading asset: {fileName} ({contentType})"); + var fileContents = System.IO.File.OpenRead(filePath); + + try + { + var assetUpload = new Octokit.ReleaseAssetUpload() + { + FileName = fileName, + ContentType = contentType, + RawData = fileContents + }; + + client.Repository.Release.UploadAsset(release, assetUpload).GetAwaiter().GetResult(); + Information($"Successfully uploaded: {fileName}"); + } + catch (Octokit.ApiException ex) + { + throw new Exception($"Failed uploading asset '{fileName}' ({contentType}): {ex.StatusCode} {ex.Message}", ex); + } + finally + { + fileContents.Dispose(); + } }; - - var uploadTask = client.Repository.Release.UploadAsset(release, assetUpload); - uploadTask.Wait(); - if(uploadTask.Exception != null) - { - throw new Exception("Fail to upload asset!!" + uploadTask.Exception.Message); - } + + // Upload all assets + uploadAsset(_zipFilePath, "application/zip"); + uploadAsset(_shaFilePath, "text/plain"); + uploadAsset(_chocolateyManifestZip, "application/zip"); + uploadAsset(_scoopManifestZip, "application/zip"); + uploadAsset(_wingetManifestZip, "application/zip"); + + Information("All release assets uploaded successfully."); } -Task("Chocolatey").Description("Generate the chocolatey package") +Task("GenerateDistributionChannelArtifacts").Description("Generate packaging artifacts for different distribution channels") .IsDependentOn("TagVersion") .IsDependentOn("Package") .Does(() => @@ -570,21 +834,18 @@ Task("Chocolatey").Description("Generate the chocolatey package") CopyFiles(@".\build\ChocolateyTemplates\*.*", ChocolateyBuildDir); var nuspecPathInBuildDir = System.IO.Path.Combine(ChocolateyBuildDir, "gittfs.nuspec"); - var sha256 = CalculateFileHash(_zipFilePath); - Information($"Hash ({sha256.Algorithm:G}):" + sha256.ToHex()); - //Template 'chocolateyInstall.ps1' var installScriptPathInBuildDir = System.IO.Path.Combine(ChocolateyBuildDir, "chocolateyInstall.ps1"); string text = TransformTextFile(installScriptPathInBuildDir, "${", "}") .WithToken("DownloadUrl", _downloadUrl) - .WithToken("Checksum", sha256.ToHex()) + .WithToken("Checksum", _sha256.ToHex()) .ToString(); System.IO.File.WriteAllText(installScriptPathInBuildDir, text); var releaseNotes = ReadReleaseNotes(); if(string.IsNullOrEmpty(releaseNotes)) { - releaseNotes = "See https://github.com/git-tfs/git-tfs/releases/tag/v" + _semanticVersionShort; + releaseNotes = "See " + _downloadUrlBase + "/releases/tag/v" + _semanticVersionShort; } //http://cakebuild.net/dsl/chocolatey Information("Creating Chocolatey package:" + nuspecPathInBuildDir); @@ -629,6 +890,27 @@ Task("Chocolatey").Description("Generate the chocolatey package") { Information($"[DryRun] Would have uploaded chocolatey package '{chocolateyPackagePath}'..."); } + + // Zip Chocolatey artifacts for release + _chocolateyManifestZip = System.IO.Path.Combine(buildAssetPath, "manifest.chocolatey.zip"); + Zip(ChocolateyBuildDir, _chocolateyManifestZip); + Information($"Chocolatey manifest zipped: {_chocolateyManifestZip}"); + + // Upload Chocolatey manifest zip as artifact + if(BuildSystem.IsRunningOnAppVeyor) + { + BuildSystem.AppVeyor.UploadArtifact(_chocolateyManifestZip); + } + if(BuildSystem.IsRunningOnAzurePipelinesHosted) + { + BuildSystem.AzurePipelines.Commands.UploadArtifact("install", _chocolateyManifestZip, "manifest.chocolatey.zip"); + } + + // Generate Scoop manifest + GenerateScoopManifest(); + + // Generate WinGet manifest + GenerateWinGetManifest(); }); ////////////////////////////////////////////////////////////////////// @@ -655,12 +937,10 @@ Task("AppVeyorBuild").Description("Do the continuous integration build with AppV }); Task("AppVeyorRelease").Description("Do the release build with AppVeyor") - .IsDependentOn("TagVersion") .IsDependentOn("Run-Unit-Tests") //.IsDependentOn("Run-Smoke-Tests") //TFS Projects on CodePlex are no more reachable .IsDependentOn("Package") .IsDependentOn("CreateGithubRelease") - .IsDependentOn("Chocolatey") .Finally(() => { if(BuildSystem.IsRunningOnAppVeyor) @@ -673,7 +953,7 @@ Task("AppVeyorRelease").Description("Do the release build with AppVeyor") Task("Release").Description("Build the release and put it on github.com") - .IsDependentOn("Chocolatey"); + .IsDependentOn("CreateGithubRelease"); Task("DryRunRelease").Description("Do a 'dry-run' release to verify easily most of the release tasks") .IsDependentOn("DryRun") diff --git a/src/build/git-tfs.cmd b/src/build/git-tfs.cmd new file mode 100644 index 000000000..bbc5288c5 --- /dev/null +++ b/src/build/git-tfs.cmd @@ -0,0 +1,6 @@ +@echo off +pushd "%~dp0" +git-tfs.exe %* +set EXITCODE=%ERRORLEVEL% +popd +exit /b %EXITCODE% From 37d0e133853e04f5675bce93e8e2f4700b2c437d Mon Sep 17 00:00:00 2001 From: Lucian Muresan Date: Mon, 4 May 2026 23:45:50 +0200 Subject: [PATCH 2/7] preparing release v0.35.0 --- doc/release-notes/v0.35.0.md | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 doc/release-notes/v0.35.0.md diff --git a/doc/release-notes/v0.35.0.md b/doc/release-notes/v0.35.0.md new file mode 100644 index 000000000..bb3525530 --- /dev/null +++ b/doc/release-notes/v0.35.0.md @@ -0,0 +1,37 @@ +# git-tfs-lfs - Initial Community Fork with Full LFS Support + +Community-maintained fork of git-tfs with full Git LFS awareness and updated dependencies. + +## Full Git LFS support + +Implemented complete Git LFS awareness using the Git filter-process protocol. + +LFS files are now handled correctly directly from the initial TFVC clone, including: + +* automatic smudge/clean operations, +* transparent pointer-file handling, +* compatibility with standard git-lfs, +* support during fetch and checkout operations. + +## Improvements + +* Updated LibGit2Sharp to v0.31 +* Updated StructureMap to v4.7.1 +* Updated xUnit tooling and test infrastructure +* Refreshed various dependencies for security and compatibility +* Added support for relative paths in .git redirection files + +## Breaking Changes + +* **Dropped Visual Studio 2015 support** - VS2015 project removed from solution +* **Dropped Visual Studio 2017 support** - VS2017 project removed from solution +* Minimum supported Visual Studio versions are now VS2019 and VS2022 + +## Bug Fixes (from upstream) + +* fix: read/write of `description` in bare repos ( #1487 by bramborman ) +* Fix handling of renamed branches for clone/fetch ( #1493 by @dh2i-sam ) + +## Notes + +This fork maintains full backward compatibility with git-tfs repositories while adding comprehensive LFS support. The LFS filter implementation is based on the Git pkt-line protocol and integrates directly with the local git-lfs installation for all filter operations. From d8cfea8215a573389aecfcfb52789e7672c1079e Mon Sep 17 00:00:00 2001 From: Arthur Moore Date: Tue, 5 May 2026 11:50:34 -0400 Subject: [PATCH 3/7] Switch to xml solution file format --- src/GitTfs.sln | 81 ------------------------------------------------- src/GitTfs.slnx | 29 ++++++++++++++++++ 2 files changed, 29 insertions(+), 81 deletions(-) delete mode 100644 src/GitTfs.sln create mode 100644 src/GitTfs.slnx diff --git a/src/GitTfs.sln b/src/GitTfs.sln deleted file mode 100644 index 3e2b5a528..000000000 --- a/src/GitTfs.sln +++ /dev/null @@ -1,81 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.271 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{15A283E3-44EA-47DE-B1BD-B93CC8C08900}" - ProjectSection(SolutionItems) = preProject - paket.dependencies = paket.dependencies - paket.lock = paket.lock - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitTfs", "GitTfs\GitTfs.csproj", "{55C169E0-93CC-488C-9885-1D4EAF4EA236}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitTfsTest", "GitTfsTest\GitTfsTest.csproj", "{DDFB4746-2BCE-4B34-8E45-056324CF140D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitTfs.VsFake", "GitTfs.VsFake\GitTfs.VsFake.csproj", "{20C411E8-49C7-11E1-A776-3FE84824019B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{4A46FEEE-B8A2-4445-B9D1-8160520C7301}" - ProjectSection(SolutionItems) = preProject - ..\doc\release-notes\NEXT.md = ..\doc\release-notes\NEXT.md - ..\README.md = ..\README.md - ..\doc\running-the-unit-tests.md = ..\doc\running-the-unit-tests.md - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ChocolateyTemplates", "ChocolateyTemplates", "{AC0FE25D-D76B-4EE7-9EA8-470204451C9F}" - ProjectSection(SolutionItems) = preProject - build\ChocolateyTemplates\chocolateyInstall.ps1 = build\ChocolateyTemplates\chocolateyInstall.ps1 - build\ChocolateyTemplates\gittfs.nuspec = build\ChocolateyTemplates\gittfs.nuspec - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E25ACEF-468A-4E93-9549-8BBFC72294DF}" - ProjectSection(SolutionItems) = preProject - ..\appveyor.yml = ..\appveyor.yml - build.cake = build.cake - build.ps1 = build.ps1 - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NDesk.Options", "NDesk.Options\NDesk.Options.csproj", "{4B6F5E5C-188D-4EA7-B1D0-EC185546F66F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitTfs.Vs2019", "GitTfs.Vs2019\GitTfs.Vs2019.csproj", "{54B4B8B8-F06C-4D2E-B7A3-C17C3850C88B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitTfs.Vs2022", "GitTfs.Vs2022\GitTfs.Vs2022.csproj", "{7853F7AB-87E8-4282-8FDE-6A138B73F9B5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|AnyCPU = Debug|AnyCPU - Release|AnyCPU = Release|AnyCPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {55C169E0-93CC-488C-9885-1D4EAF4EA236}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU - {55C169E0-93CC-488C-9885-1D4EAF4EA236}.Debug|AnyCPU.Build.0 = Debug|Any CPU - {55C169E0-93CC-488C-9885-1D4EAF4EA236}.Release|AnyCPU.ActiveCfg = Release|Any CPU - {55C169E0-93CC-488C-9885-1D4EAF4EA236}.Release|AnyCPU.Build.0 = Release|Any CPU - {DDFB4746-2BCE-4B34-8E45-056324CF140D}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU - {DDFB4746-2BCE-4B34-8E45-056324CF140D}.Debug|AnyCPU.Build.0 = Debug|Any CPU - {DDFB4746-2BCE-4B34-8E45-056324CF140D}.Release|AnyCPU.ActiveCfg = Release|Any CPU - {DDFB4746-2BCE-4B34-8E45-056324CF140D}.Release|AnyCPU.Build.0 = Release|Any CPU - {20C411E8-49C7-11E1-A776-3FE84824019B}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU - {20C411E8-49C7-11E1-A776-3FE84824019B}.Debug|AnyCPU.Build.0 = Debug|Any CPU - {20C411E8-49C7-11E1-A776-3FE84824019B}.Release|AnyCPU.ActiveCfg = Release|Any CPU - {20C411E8-49C7-11E1-A776-3FE84824019B}.Release|AnyCPU.Build.0 = Release|Any CPU - {4B6F5E5C-188D-4EA7-B1D0-EC185546F66F}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU - {4B6F5E5C-188D-4EA7-B1D0-EC185546F66F}.Debug|AnyCPU.Build.0 = Debug|Any CPU - {4B6F5E5C-188D-4EA7-B1D0-EC185546F66F}.Release|AnyCPU.ActiveCfg = Release|Any CPU - {4B6F5E5C-188D-4EA7-B1D0-EC185546F66F}.Release|AnyCPU.Build.0 = Release|Any CPU - {54B4B8B8-F06C-4D2E-B7A3-C17C3850C88B}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU - {54B4B8B8-F06C-4D2E-B7A3-C17C3850C88B}.Debug|AnyCPU.Build.0 = Debug|Any CPU - {54B4B8B8-F06C-4D2E-B7A3-C17C3850C88B}.Release|AnyCPU.ActiveCfg = Release|Any CPU - {54B4B8B8-F06C-4D2E-B7A3-C17C3850C88B}.Release|AnyCPU.Build.0 = Release|Any CPU - {7853F7AB-87E8-4282-8FDE-6A138B73F9B5}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU - {7853F7AB-87E8-4282-8FDE-6A138B73F9B5}.Debug|AnyCPU.Build.0 = Debug|Any CPU - {7853F7AB-87E8-4282-8FDE-6A138B73F9B5}.Release|AnyCPU.ActiveCfg = Release|Any CPU - {7853F7AB-87E8-4282-8FDE-6A138B73F9B5}.Release|AnyCPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D260574D-8D88-442D-A97F-7CF7F02738BC} - EndGlobalSection -EndGlobal diff --git a/src/GitTfs.slnx b/src/GitTfs.slnx new file mode 100644 index 000000000..43aeaf3fc --- /dev/null +++ b/src/GitTfs.slnx @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 4a915728fd24a0a19d54cdbb3162fedf8fa194b0 Mon Sep 17 00:00:00 2001 From: Arthur Moore Date: Tue, 5 May 2026 13:52:43 -0400 Subject: [PATCH 4/7] Set implementation type for several interfaces --- src/GitTfs/Program.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/GitTfs/Program.cs b/src/GitTfs/Program.cs index 48c54c2eb..900aee740 100644 --- a/src/GitTfs/Program.cs +++ b/src/GitTfs/Program.cs @@ -130,6 +130,10 @@ private static void Initialize(ConfigurationExpression initializer) var tfsPlugin = TfsPlugin.Find(); initializer.Scan(x => { Initialize(x); tfsPlugin.Initialize(x); }); initializer.For().Add(); + initializer.For().Add(); + initializer.For().Add(); + initializer.For().Add(); + initializer.For().Add(); AddGitChangeTypes(initializer); DoCustomConfiguration(initializer); tfsPlugin.Initialize(initializer); From 1c5467e088cee21e6efc8b8b3e7dce7e97781d36 Mon Sep 17 00:00:00 2001 From: Arthur Moore Date: Tue, 5 May 2026 17:11:21 -0400 Subject: [PATCH 5/7] Switch from Paket to in project PackageReference --- src/.paket/Paket.Restore.targets | 560 ------------- src/.paket/paket.exe | Bin 72424 -> 0 bytes src/.paket/paket.targets | 72 -- src/GitTfs.Vs2019/GitTfs.Vs2019.csproj | 5 +- src/GitTfs.Vs2019/paket.references | 7 - src/GitTfs.Vs2022/GitTfs.Vs2022.csproj | 5 +- src/GitTfs.Vs2022/paket.references | 7 - src/GitTfs.VsFake/GitTfs.VsFake.csproj | 1 - src/GitTfs.VsFake/paket.references | 1 - src/GitTfs.slnx | 4 - src/GitTfs/GitTfs.csproj | 8 +- src/GitTfs/paket.references | 3 - src/GitTfsTest/GitTfsTest.csproj | 12 +- src/GitTfsTest/paket.references | 7 - src/build.cake | 8 - src/paket.dependencies | 47 -- src/paket.exe | Bin 87232 -> 0 bytes src/paket.lock | 1051 ------------------------ 18 files changed, 21 insertions(+), 1777 deletions(-) delete mode 100644 src/.paket/Paket.Restore.targets delete mode 100644 src/.paket/paket.exe delete mode 100644 src/.paket/paket.targets delete mode 100644 src/GitTfs.Vs2019/paket.references delete mode 100644 src/GitTfs.Vs2022/paket.references delete mode 100644 src/GitTfs.VsFake/paket.references delete mode 100644 src/GitTfs/paket.references delete mode 100644 src/GitTfsTest/paket.references delete mode 100644 src/paket.dependencies delete mode 100644 src/paket.exe delete mode 100644 src/paket.lock diff --git a/src/.paket/Paket.Restore.targets b/src/.paket/Paket.Restore.targets deleted file mode 100644 index bbeec153f..000000000 --- a/src/.paket/Paket.Restore.targets +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - $(MSBuildVersion) - 15.0.0 - false - true - - true - $(MSBuildThisFileDirectory) - $(MSBuildThisFileDirectory)..\ - $(PaketRootPath)paket-files\paket.restore.cached - $(PaketRootPath)paket.lock - classic - proj - assembly - native - /Library/Frameworks/Mono.framework/Commands/mono - mono - - - $(PaketRootPath)paket.bootstrapper.exe - $(PaketToolsPath)paket.bootstrapper.exe - $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\ - - "$(PaketBootStrapperExePath)" - $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)" - - - - - true - true - - - True - - - False - - $(BaseIntermediateOutputPath.TrimEnd('\').TrimEnd('\/')) - - - - - - - - - $(PaketRootPath)paket - $(PaketToolsPath)paket - - - - - - $(PaketRootPath)paket.exe - $(PaketToolsPath)paket.exe - - - - - - <_DotnetToolsJson Condition="Exists('$(PaketRootPath)/.config/dotnet-tools.json')">$([System.IO.File]::ReadAllText("$(PaketRootPath)/.config/dotnet-tools.json")) - <_ConfigContainsPaket Condition=" '$(_DotnetToolsJson)' != ''">$(_DotnetToolsJson.Contains('"paket"')) - <_ConfigContainsPaket Condition=" '$(_ConfigContainsPaket)' == ''">false - - - - - - - - - - - <_PaketCommand>dotnet paket - - - - - - $(PaketToolsPath)paket - $(PaketBootStrapperExeDir)paket - - - paket - - - - - <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)")) - <_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(_PaketExeExtension)' == '.dll' ">dotnet "$(PaketExePath)" - <_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(OS)' != 'Windows_NT' AND '$(_PaketExeExtension)' == '.exe' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" - <_PaketCommand Condition=" '$(_PaketCommand)' == '' ">"$(PaketExePath)" - - - - - - - - - - - - - - - - - - - - - true - $(NoWarn);NU1603;NU1604;NU1605;NU1608 - false - true - - - - - - - - - $([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)')) - - - - - - - $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[0].Replace(`"`, ``).Replace(` `, ``)) - $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[1].Replace(`"`, ``).Replace(` `, ``)) - - - - - %(PaketRestoreCachedKeyValue.Value) - %(PaketRestoreCachedKeyValue.Value) - - - - - true - false - true - - - - - true - - - - - - - - - - - - - - - - - - - $(PaketIntermediateOutputPath)\$(MSBuildProjectFile).paket.references.cached - - $(MSBuildProjectFullPath).paket.references - - $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references - - $(MSBuildProjectDirectory)\paket.references - - false - true - true - references-file-or-cache-not-found - - - - - $([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)')) - $([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)')) - references-file - false - - - - - false - - - - - true - target-framework '$(TargetFramework)' or '$(TargetFrameworks)' files @(PaketResolvedFilePaths) - - - - - - - - - - - false - true - - - - - - - - - - - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[6]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[7]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[8]) - - - %(PaketReferencesFileLinesInfo.PackageVersion) - All - runtime - $(ExcludeAssets);contentFiles - $(ExcludeAssets);build;buildMultitargeting;buildTransitive - %(PaketReferencesFileLinesInfo.Aliases) - true - true - - - - - - $(PaketIntermediateOutputPath)/$(MSBuildProjectFile).paket.clitools - - - - - - - - - $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0]) - $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1]) - - - %(PaketCliToolFileLinesInfo.PackageVersion) - - - - - - - - - - false - - - - - - <_NuspecFilesNewLocation Include="$(PaketIntermediateOutputPath)\$(Configuration)\*.nuspec"/> - - - - - - $(MSBuildProjectDirectory)/$(MSBuildProjectFile) - true - false - true - false - true - false - true - false - true - false - true - $(PaketIntermediateOutputPath)\$(Configuration) - $(PaketIntermediateOutputPath) - - - - <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion.Split(`+`)[0]).nuspec"/> - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/.paket/paket.exe b/src/.paket/paket.exe deleted file mode 100644 index 1f5be73efe6ba5ce9e2131c0ff6e4d2cdfbe328c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72424 zcmb@v34D~*)jxip`^-EunQSxJCM1C*gd~&6B7(jAfts{=Tu`=he$M zb|tHN9eaZl-(1xZ@9DAos@5f{oc^AwuAZuyi`%L;+ntH#+}ywjt$N8UAr=^>c=m^j zKJS)xObi#<#wa1)0Vklii}DO1s(@GFN!AfAmEFLEMSwnQkq&;{?+w&z?L|Ta`Cs~} zNhK{l$~DAd!lAb`r3CaxLcBQ)&uNCp!Q+V>Lsa1TUw^8E@Mj47LC?*goBI;m`am!L z8vxR{uCP1vQ-#_zJ4vSlOtuX+veJKKO0hSlH9LuJ8-ipj*-SnV|2au+`e2R_qsXuL zkZn?U#kjZ-SKlq*J1I6~xRr(e3s5*pifNF8){w{k5i~@?XvEqktIh$hH()m9S`K<# zZ=@9bM#~d{$yT=X*~n%|AB)>lfk#PKEp(wOA=ADWtaQeJv{VMAUuA%7;V6$dih@u= zC^-aK0x|-!G20tKPqK3Sv7pa^MZIDn5e2YXuFQE2dXIBGN#@Tbgh%MB_ED(|5NQ|AKIrG6OvU+z@E0 zRotq>a8nZFI$$qAdSjmDi}--x!IrRJSaZ{`6E!#GC{EZ$KSU0@0S^a_(d(cS_C{cA zAW}yr_^ctS22pBjQ~VHZj_QYG1eFLRBLD%)9dPzjMo0zhMu6I;kn;dIG7DTAdQt2_@`X)3Mz=**-Uq&z{bCzIbAuussh6u6^*M8jH@Y zB$$t++NPX3(|N=tPc$QndU?e(@kKpr@0I z(3+NMxmR&_c{(t*Uvizon;bnys>uhDQibR8$TXnQa`>I*dqk#C zqy?OS6+!0@NP7k#xjV4Cb8t0lshYEpP&+^=6i^!@7-WI$qj0)q*%%0cmwi!TV5uR| zqElw5RSS)2bY_~eL&}_ha|O(|BH3^!2cm3g9|Z2)MKz@fF-Q9CAAsZcF^PJZJisH+ zts){jgvSEuMsErw>tJEPGIu3lo{ZH=in0OgxK-~q5C!7KSgy2ol8D`ksZe^MoAj^0gBv>P=wf{W+kPl0E$SC0)4<jGUq#}Y4{4nHlwyg-X4ilwJ;8PqawKk5&=`%cY~MXx9p{$j|TiP%dcE) z*~`F*v;iE3P9w4$Sc!cWG2w?sn&BI>eN7ck*c?>I=iNebkH&oVO33FPtts?4t07jJ zvZXd0^4uQDkQG^IQ_PxDj22mw+?8mJu&)(0SREKNhDV`(67`F$f>s$>4QQ_cxEz%+ zBA)}s?TB7R^+#`soQ;^^cBMq~w4#zH>JM$^Hb4S+G} zi$*pA$<}PRJ<`PqMNxn9Twt}4O@MYcp<#P79vDMXp#J6Ae547Aw5s(L?4rpZ7@KVM$jKDnMAL$B4`Xt(t4qh zRzWV>05m#G?#!Zm!=<^45ip=sF&F^@epL)cz<`$&gAp*GTQL{`1B(vDU<3?QMKKrw zBj_?10VCux7@4FiVn!Ot&NZ^%#8RoY$ycWq?8z9hx5&~f)>6kWsm#5lHe4CFMa?LY zCQ5~G%CX)@KoBq^WO5|0qV-@nxdUFpfP{=??*yLRn2#}VKCm3blU;a%+>J-mn@39v zjN>J!S-Flgsi5wT|6!tH5*0yXy+BNutJ-L`Q;Xy9+RJPB)0FPL?&%O{(rxY6Oy};~?2wV(+_{sUKrk_%bmSQZIi~8ALq%6ac zMFkb?f$l@uF==4{U4k@(c!fm9kbjC)3`RevT`=sq7hLR|l9xi3MG!6XoVlcs#$i#; z(fQbj(HO|hN`47KwDpLL2Ay+sG&Ui$2SLpOFK5N9EQJ+%oi8E3I~GE^(?gZ;!yiV3 zd^TPL&Qx1dDVoHv`ED!~;;geoIl8Yg&k5y=-pZ`xWl%pr{!+FhxC```P#A4_Ig;!v z0FqY%>@I>(`tz!96VKqrJ8opv4cO&OM$lcC!Y9q|kF-nS| zm7;>|pqRcu`x}95JgOcv%m`L>Rv>vTwAR|!0ZRM&6mHo!r0^1ZALIW6SXXP`h=;u& zAUfT70R^++17tXrO>H|8Pt+Fi(1?1P^32lD$Fj`u>e4mgRgI=ux+YMP-IyyY&$e$O zjlS?IMCvjBtJaTx#L_})S80D4sisXE(pC1&Bx&-bsuoYV(s><)+qY0cv;->6LQhGd zw{d*PgN^D}z%I0`kX2cA+*lhRB#RIqkl{eG2|1gPkT<-l&>Qli7f?}S4qCBnSvg$U z)|lgK%0l9f(3F#OqDu`JYA z6=(S)6Jd$Z#vs9p|7ai`n=Q4vQT>F*e&ZC?cj=q~^E`h%sGDEPdEr&d!%;b}WRxt4 zdQivFa$f1@oAS-dvw?ihJ^<}?jrB~Tg*C(UC?jMEGIN>|1YLqoLj94dQcUgKWF>Ed zk|;yeiyDFJh}~vMZV5N)>Gwcdrkd5?lt&HQ?59?3mf;-#LgG1EV_MWp>bQ%f}Ne(=@5SH1u1NiJa0P7kH zxd=}|nqn{lMy1PO1dJ+|!3Y@DE`t#;hPw<#+;Ln&ZKS5>aAYogD|y90dj(4t zh~vdxOfgmj;l+|A5%g5v2deo3Z6Z=LB4_X@72e2HlEEpYuFnpOjH z=LpmeA?$t-s2bZbLDx-29w2Ss2G~Vny6qy%$fMF32?H$JpIFkFn8Ksy?5=?<>y`F{ z$ZOgUk@Dsw<~eJC5~F3iYw0me4)Ajf?JTSz$2}#-jp%etN#8++%A9Z{0d_PhQ)ntJ zuQZkBqKkCC$aj%hCr^->)Ko1oY>3KSCtYk_X5PqpDs_y?s)*Tapl76k{kY@ce#Ai#qhdFBq+A%o>ohVTC4*E{yVMy$*L#1iw8z?$%b)k^tBb4t^fF#-x zYw{lg&51k)=*)sgc?G04AG;NIkIStqiu?#-G*iXa@sVI59mpO8&pt%p$CT=8tijZR z`7_WrjwXIY$dKQD95fzJkQmxJ01=)Qo;z9`^7W4=!K_dg7D9UY6SA;lkNgCZKD7Wh zVJsiD(q0f}pJM?dlL2xqS1^l?60KdEQDbW-K^p@QQ|WFW@JJ`{sOBSxS*%CXSWHn?bl{1Ez^(#0}gfI({gqqzu}mPV`6C_{gS{iG$tfb-M6K3y0k5kfaaC24g8uJVmJLvtS%!$T(QT{<8p?|N3`s}B0VfHYT)$vv_Bo^- z6iUsrfP6MeFjSGXUSp&u#9v4Ksa05GsNQlNUdPyIKM|u zf8^(oEy?z=2?!KauRo%R(R!ieIO^w?+|@&^?b&71!`#(N5AUw?=yBW{Pk#CZlw?~w zDMg)<`<=xFqBo~;lxEJNTK*DJF~75&Q%am~;hC9CAu-2!5nR^={@Ww%$mk3yO!IUO za!!2^6;s3`nd=>+IW9fWB{y2Z*mVF81jC*A4sf7E5gi$*}zTovM|QG zAESL2We9`AnZabT7}u6 zTvh1@GjrsAYJHtgGUfC>OKHw=HD|PJDBDKAv_d(mkcQ$6vvNMYkWCqKDkz`I|J0=# zi<~<$gtJsfQ+c>CU&%=QbX9SvvUbu)u%AN%zw#|OwJF)ZpwL7Ooi456U%lUo86&LPTWaEIn`Kt*EaEzA$)$Naufp8Y&* zJepG&@`XYQ7tt2XAM_cCKOe^Z1pM6wd=k29CjSNSbHGsX$1Cmxj#VjQA4k=Su!f7oGNof+-)|ra3J+W+Gj<3l67ZMx8CR3K8 zvMgG;Q-WXG^H~MCAhH=CI@^p%8I{Vq-x6nczQOl@u_DFwfc_1flPpA$QHeFp3!nyQ zUZ+#2dV12*oe?lFPbmf?U^KW4M!-NQRT7MV(daT50VC!z7y+ZnWiSH&(%SLcXa&r4 zA+tXpi{F6N6m)J5Pt!e|@Px$WO6 zt0;n59LL6@$n8uKRGWY7MSYyuRH1}oMM}u|7pkvi!cmphRH0-M5Lr>COtIFZB%2GA zq@wIgQ6ADW3U{kUEZh{UsxjeHRYUNls#zhQTeWmRgw0~XrEN#)^sAFgA>UBos-bPiDa-&Bvd70NT6?90$13giegCWoV1C~ zNgHpmUqR^sY^+lIuV%%|#-(!(wqW7WrPywrm<~oX7s<@?^i&-49WW^{SFBnc)8Z=)*HQu6h3~?sJ>Trxb}CgSN=40Ld@G;#x_1EWAU3N5EM$ zNFALCTeUtq_NBvITC+Y2`>w)#hD27GIukti6#6~( zpQ(Vd$Y1C&OkI~n>r9U~@>k6{TR;Cs&*7%ztpyNIq=c$L$p2E(7&G|}o{_&3L4CCh z_KqNXnO_^Z0^+p+`yWWRXdj1jg~&5_@P-B^tRfcj(4C2mXD#v;1u8qU8)pko__&cH zO^=@a0SaPJRG<2i>Ql+tQ7AxKcEi!?$&2>5$0nRL@D~kT7HRe;|u$ zM?S=}j(mo7Hv8^lmEegSCxo5&31Mq0k0&RhtJKO}h^?Mla~Gnh2Lf7SbQzkJKF!l2 zSds+>$UN#FJ_c z({wZaBz%)Cor|E{@_8c`S@%=$@M;|n(tpP7;S^NR#n^LT^Rk;gM8`(VIZWP#_fK=Z z&j=W&y9`EN!bKn&)x;HT4C<0Tl(fUNQ3B3NoC7HqY505Rim88l#bnrRz;0Ef z$=l4p(MDV@qDNazRmg-%NLE4ppNunRux#VhIUVY zt)_bM5BD&1)%Y9eQx|egmCk(`YIW0KbXnfW@5n}1_{Sg=?lt*EMhjX0cW~CvlT13R z(=jYG@R-6t8K_IE~C4yyi%)y&Zbah-EB>r7Xfey(-MQ*v&Joegz$Ay1ZaMAfNp zH`Dj^uBr!6F*r!wYu+PD)eT8@?kVW@JJ|}3BMRZ(>^##44 zn(jF302JB3HIEx=NqKIOhR#qlP~JaSNr6 zlH>E+Bk|09^TwBZbW(aM7+dOG<7#trlDUl-HF*6)SK#~LsB3zJechkFF0$@dei7nx zqT?|UnS&&pL{nTa`M3tMv}fx=EgRvp=xjZrM^wX4G@_#yS5`#ux=O&A z4VJTvz&Vtd58l883RMVM6X{7a2qR!1P$&i?WzMxfwh7az)l+xLPp*OVMVYCQE}fRcEKl=kSo=*jL9Q?_k}2tZ)Yw5a@?9twJb;7 zYX>NW)-sLo#sKuF$`^yNd+*>(b0|{~6{{Vf6k2&SQtxWSZdt#dWzm~2WD2*>6g-v9 zuY&7rLoMwqf#K}}TIyK4v2@L}YHr#pN})Kw_wO{vEE}xrS1DbV!cn z90g%=7miu3!b3)01N55w&b!sr>YRqWk#jiZ)5UU}uexH5Q71McU7S7=#JSulxT-Lp zCrsB_x@e!x(Tw8xy{HT3`cQhoh`2=NsiR=iE{2yd?Ou)YB5T2qI&T0~wa#`ftxcPu zXHn<(;L%9KG5IGhiik`#gJ;tY!0R{vTCs%j%r1E}>-bY9M7eUWRs1 z>&eZc?mAJ1PLFeauNZ^6P~UWZiF}{YF1j(e-$t-Uw4!yGXd~D`SkVBV0eHm$=t5G+ zSzrH|x||P@&b1xf##V&FP!6xXBPH-5&wy|P`8JEASeBo8g$QrN#5*=8w~BTo4)rH5zNm+0Z$b(z+(fV9AUAxhaq2ywn55a}XN4Md8ODJC{+1*9?%3Qm#kf-;hLdm6^&)ju2 zGDOzEAbiJQClP$g9HqK1BOO$C57)a6CiB`6t64D)I#f2FX%B%+)VT}=xr;2x_hjjn zmf996$!vX>@m0u|U6G4Ui8o!-^0lREk3?JVU&CeUMx%C!?{dV%a7d^-oX8|vgf z)bM}OgF8G_6SseHRQh;XYR@%VEZi;T&=^5q!SY!36-K~7JXZ`xz?kYX7y$$QSV=Gf z#x$3~$hTAT8}=(SzhQ%6NpA$Jc7A&SYe77{k!(DpWzL1D6#1LR>lY1yH^k6pE0IQX z{f*FEgmHvT54t%fW6ORNm5H5~#J3voYMOHua_`y?sZ1H?7H~`KA3}2XmyyPE;!Qw~ zTjwB~eq(`BctMbL+*(6ycqG7+Bp9D_+2OTA5T^I+TB-7;$jC`Fa*J88y7e_chA<#9a-w1C&DVkT&M{n=C$pi~98pPxHYK(I!~qgidq-P8QCB zl5FQ;I6KGW`^csutld^H_xIqch>L|dwuaWAm`Ck-Qp`KCk=v9~yx3Jj=L&fJPWj(S z>sIm7J7}(@tG0HCs~$n`sFmHgH5!9LcL0&1@2$CpI# zZLu9Oo%gWU!o1TdzC8n*_;3hwJ>~oKxt`uo&lm={E}>qK<6H)Fa@}5lNJ+gQ$9aY- z&U=1Lbc1^V4H+s5ZvO!)g#DLpOvTO|?MptbBc#=y^)b%e&@gTzu& zG=L$b7bI*Oz2Hdh#y9QQ-+SoI6510KTIp3yp-(#vEv(iroEJ_cDq{gtK4<~MLU`L= ztzcYdq#8`M*EA!t(ct%D19*p*&V6U0E$Nd!6Y(~>XChwp0vFCiQY>spu;=#RwXt0@ z=;_%71s>_$H4_haoGRgJDYLqb%V?xyouW*K=LT38q zyT}x9ev@Iab@>#oKUvLZuLa0Ke(8?j3tEB52!QOP-nuYOMrq5S$6}6{y-awiE)-`m z4*8?XGVSj{+0lkNr=mIS8RZe>=%cxH&c#UMH8{Q3f-p~?ygX4+1)YpXMJ{Ft?5nlc ze@PW?P9nHj1D~f#k1_chth}fv0#kagBB-yegc8IGd@t=ODhZ|s>{?U?JE6ma7}-|L z^fhG{c#aqQv39{187#XFf|yb=nLcLb`m>VtNQ^e)q8Q67yy#_8+4M~{RrUnac^Uf4 z>` zB)EwL_c?MTMX4yXI~GtU2Y|ob;S>OiKqt=JCBIZf-;ts3Bbx$^%^#biMn6 z=&nA}9l>{70=u@50IgfqcXGVkhbcW^Res#;vBF~m;wVDZWN3R?oxe-GQ7;SWD{z$0 z6j&~bGgA4o^;{L0 zj{<2pQ*qI<2iP8Q)%g+u z_;$$dq6$;Ah)jb~^qmBQ_C*3iANNG4D^5Ii?u1MXYXw+9FQo50A9VK7JPS8QbuNVv zpkh1jY(|IxjnC%fENbElARUdWB?rCa8Q@_-UpTT+7+r1cyci;KC+*qn4^c*RhunDy zvuHaeccLi(FQep-C>c3unfPK3{K5O}9`NN(N{~BA0}ltBXXRMV0VMI8 zg1E&v$2oi|!RR{YofG&bUoS+LNnUox@VYFyxCl-PN58GU3m|vWK7ijO9vwzlNKyRq zdSncFumoWtGo_MxOmp({z*!i5EOETxl}bxoQAqG5 zhIVCk zz2Shkss63nfM{(XSkgprSP5zSc^OH{VGnrch)bxYMOkznO1!e-0obstnDGCUlgu7) zED;_;xxOAIc%b6e220ekJb6Wq!?dkLD9!hKT=6HreADLD1$}`~s<# zxQ~7EMh^My4YYzK-nEE-Da#x$e!yEI{*<#2UYb%&{NL7-_x{M`2+BLKs;VUocqd2^IHsG3{b8=4kZ|3 z|BuU~(#wXD{>SpkKg~!j5Z<9z4Ji;mh35-IP8q=^fEIpcf%1M_Mo@Suuf<-yJw`S1 zq34u|M|0~Tc?Gxruk(pN-rA2|dJp?8pMCNgYxofICE{IkVZ}(}*$V1KTWZOYOS8$6 zoFXdadyu5jvJI0ijVMD5AjJ2f)yFfn2h_Vm_Y576QK!;+G!+6J6gSsUS{BA5Q8(lg z6~avsX*s=$r~-WRn5Z_+SAnK+eyEXFdp|lGc)pC zKol(d1xsEmTABKQsY}Fsra&OySiqnSWVc+rS?0CUdm7e(2SC zmi37DhP)L6ch_$LER7LdRYI^Tn>63yr?Q+Zf}?x{AM=s^Da^l_@r4ZE^4|!4F3KG( z>auUms}={U?#K(Vg`-7x@wbrri2nw_Uom{yNBDs6+ko$~=6r_lTU1Id>pzz{m-)X7 zJs&pw5R#8){S>xc1Di*S7wVn?XL;ao-UKmW80C5|>p9IaM1SD7DLfn?ekMoNOVx;M zUOKQB{)cY?tHqA$8({yqI>Ik#It={E#^+FOQ^h88#lUv(R}3s>`1>H?RZ)UHA%b_; z6CB3)!W_ci%O-dp+7vRdbH%`+5`s=H!Axx{Sn@|`>lFh^v(oSc+I_`93rd+F`n)ga zm5BGntAG)c;CkaNz}4oz0mICHMH2s7;mNnemyt_B%A1p4BJMXrfZs980KeoZ%O`#f z@NbC-w>UyB5i`65x3X31JR9N%@ILRf7jIWv65i3_&`&y#mYg+80oy&Ke?^~w{!tb&98e1 zXA^~*N+4~NDA!a!(ng69nkucRzzQLzsoIK%23_ce8mwKq6RJWE@8qHMz z`^2@wjs(|kM)C{0m!$zCyB zQTtq?pdsHDYAmJHbA&TvMLle}Y>@x2BGTWoWxNA14LW>soLdu|vGC zse@KtXs1}tCky+;Uy4dXyTmqH+@rT1jn;(r2>O0F+p5<%fx<7 zZ3?!8E*H0HYDaK3sBdbjy`)WEA-=7t?vkLmLOi0WZwA`rmEv(tJr)RJU-7J__95*m z@tmd(Anht~jHx$_^UD{6t`-NTQQe;ur8P@K*ND;YZ>9E&R5omgKd`>%~7bwK^||?*@FRsZAAUhi(ui9WY}2 zZK>!4mBZ9N(GuDm+9&Q|O4<28gG#?q?43#Z_W56LNQQ0{4{7S1hTWhZ)zm8ujeZAY2J(A15wHhG)q(bSUKR^M%6i>8L=eK~Zy7|_%?xk2$&afznd za&HKIOZ0Nx)^|rW^)}{* zd&S$DdWxy{n7T$B4&N2JR}9Ri8ognxDY_x_fcTQ8&b5MgXLY}(mc)YML2xX0(K2LhdpJ|HxnWo5}k10V&l0OfnDDvlzQxy60@f1b=d?H1WKc7rdixOV6e#^3u;!6nW_vDT@5^%M?XE`&Ejf7JDv5QH!N1YNIqoZS=hO zkbSntzozL(=r_WgLs|FudzyX&Du*fR<-ZBNASzUvxPRy<`CDl-iPy!K6-6^;!5iW^rk)U|2mcm&Q^Z=yfG5O=;Jcx>#JG7x?GgPsSp|O)Yv-%9 z|IPm}^p4oOKvBi`QMSK}>zUdk?#%gH=pQ0$A*Ed`uE-fB-xcLdsh<3vn8MUv|2<6w z1@DPjnmX7N2DM02Wc5GA3QdvK{}k;^DNp=Mtk)EI;$NbRDQerH1^*HQOsN{ZFTTOl z9#InQF+ULF7LjFp#BYLa@(K5>ThCw~cZ=9_u>RH*w^_rrdg%_0h^Mse$HaA64+hPl=)2K%Hl~_$tjS7rs zS<4=gThUxlXkami4^a~eiVZdYsdZM^cu%EqYle-FG)1i$HoVI@ACJaTBUe+@nx#gG zrfBs$#2BV2TKx_&>NQ0x+%jXNrf7v*W}L1mT2+=C(=W%kx8hN+TxPMJr zOU(GGrbx?3<9Vi(Eu)OTXo}i>l<@&mY7~z$Jf9;id&FDWly<(RhSmi^z0A}Tf@~RW zyv>vvRbzCkkYxr=3jf7v7vhY!)rWJ#vq|TLVzk-n8*2nLWgDvt#u-UXtus3d#v5PI zRJCaJO)xIk)SqOl?=<5kP2DVd3QiwX-bCXYI_)qdCk{%RWPCRxZIbZ>Q_AWy21%Y_ z9M+N#8_9w*jMp^vn7O@Rvhk*-uJdd!m}2}jL(9}bTBaHwXvy!2QF3tFnMUR3l_##i z!S0!Z@||hKbeb){P;jQPpDAVMv_X>7jIV0Rb49&1&A5jt@;rW@*m#PmSB*LhsTM<= zL*>0{>}#k1bq`Z}#3T=;J*CpJwnW-wi*Z;>-iWsz(rMqvt4}S)Z*|)6%8LqGjQVz^ zbA9DBq-Cx~TZ~bhcA?0VS3>f9rc@oK50ad2T%slajFz5mT&JmW^ZJ4r#y(ArMemt8 zDBmpO4xM(dY?HH2Nc*l%yAj?!G3|MscFrl%-qdL^`Q?HW^L?n(e!}JDuBEz@udg*` z8Pk}$P(*6}7Mf%9Y3dV1jk(6<9rdU=$sfx3RZN7zlNU2gBhomXq^^%O@|6grZ@&@WIaY{_u$U+bM6Sw{$x*1=G z{@@d$!Hy!^2A?a^;}K4N(K1OL0DXK=G-*t{*CpSBeiVosB~z>cG{jXbNp*K| z@_@< zS7f#wjThXI^Vm_T6iF1vg_(Ur^(CeMv+}xSbyzeKPu8jOW?G_3d9I1<%+&ujER-UT zt$LiJM5eWM9P5bVTAQiiWJy)Z$(En2=f9CT$bS19+wcx-lS1K{9y=LNTj)lrb=kq7 zS3JdS{oj3Rf~W!Ap|kuputxUZ-0BWcgEZ^2J|qEB;sfuI^m?j_h*0o3R$Z<90TFKWHu9 z%n0Bwgm=I!JfFwk&++yKt=&U_UdR$&4H&?!%ypGPF_B>l!&Zh%8Lnm+XLuK&A+{R? zhsf(Hi^W~WM65&i^ZGMKynx^I-fw&lE6n}I3s_keiHj;Hh-!HeR+0^nMm8%*y!{Td-z9>dO^Y!5Tz3wJ(l11MVOQpZ$LBN^C-vj5m%0~fLR~Xmy@k`@C%$&R$P`f{9AO%AJ%;&&Xb4hO=GD%SetFU zh}0lByGDeJalonEU(`m8$r^tpf3?vn&xvj~W(p@-kKf1+6!aU+{v&liF!son&=cUV2tQ-A$mdbtrLwf1Ex@y@zW@#S^;gK%;!@ns zw8*E5_sc_a)QDRE|LG+^KU{kUw6zr6C0`YPt+^NQAHyF4%xQX99+BsVek9)#%j@yZ zi6s6JN&L6Olp#;b4^TRt&|KT}8{j{Uy@J%Lrq_W#0{lGmmbc}r@^{1E0sipte*uof zZu&0SgPY6cT=%mXw#w6EHD;$ct>`TC@8~T-LH;?%{6L;joG_P4s|k0>Qe^j-U0mN* zaQe(F=)cUYKu_Cec5@HRGWX(+w_DJj2)RnXZdMyR^XU{|S@HMHkXbgO0=M74t@)8T z#9R^niCJxiirVB-xgRI&4Y>JllcNnQ@~k-;nlUZ_JCOIf%HNw4%^#Kj6>ur}kW*WX z?IrJ-FNz?}cUs}Yyb-7W zOO0OzDm_aL?(N1svC+VP6`0^zDqpLa0-Q!GaTa@M6wv?dwZb|A&gzN{kQq}?md^m} zV;_DXeo;=GBXt*hJ`f(X zQuD0fWFa@Ywm>79{zcCvJXc*zW+J9`-8W-u$~{mw8o*&wHs+gSXzdn>3E% z=JXMH-aY11)y3Y`^1|4DxyQV7NSXH<CT(Xy+iLljy6N5rq#0WXxN1n7q|)2Gd%3=d64_6ROO59mu7D+D z5Faiz9EC?4_uL`=gIAq=kpWG$uV?(UFFs7=kBW7>xWBDTN!Fylk*!+5{ z!Q7ZX7H}5eUGjI~nbwP9Sp9?IEwi9vy7%v9Np!jOwDCxIjr9TNIwB|nA2OH3I;}%y zZ`CG1iV26zmV)zuzg4vr^3m$OR*U>e-hO!dj{N=TAy(-%(0_Ns$FjvVqqv7fD}Tiz z&!Dd&KHqDNmhV_UwhRw(j)-W7&V(NHWRzIrAMH5`jwBkyScMAVMvl**b`A0m8slr+qz>*o1eWOnI%k%x6! z+@FX2(Zzr{;u=6i1iai_#ITfM70WCTbF=(-UvV?w*?6!y?<59r1#;*Z8jlTeHG>q&#(QT9h_8Mce{o+MqD@u9K zSOm`d#@7KqGV*e0QL+!vBcr*{FG0nQgk0oxdUPW-vBgEdqe9njOl zFwSrf!vhBCzm4&Oj2~kBamJ4^e3dyulB6L?Pc_47ChKIlmSLRX0K+{D4=}uq;X#In z7#?HzDnsERJqE)nhSdzGF>GNtgW+0+9SjE;UdZqO!`m3%!SEo%#~B`D_$tHK7z!_! z$k1e1#ju)T4Z~>+TNut@xRzm@VF$xK3~yt22g5@QA7}U~!`B!Z7L{l+tYO%~a0bH* z8Q#Y54u+32e3hZ$qrBA&TNuU}?qPU<;cW~LGCaia7{gZ?3P0DEVHLw^4A(LoV0eJx zL59Z|iY&@i#c&$KwG0Os9$dLaq_H1P5}d&+KLV0OQAUN%D`(5qX@8 z;WUOb^C;I^#s?T4V0e(>F@_?ab1|I8a4o|D#R*dCT80A*4=_B)@EF6Y0+N}gU~y86 zFIrnloB;*P2tUB^Aj4w}t137b!?g?t7#Ax^Izhg|EZc<+FVk_%89??mL7xTHo-!=gaYr_fPT9@O!cA!Y@uDq6F}NI2Gdm zxG6^DuE6f65>z$5mNFdg^VQ%xC3V;f)#IJ?M#QXXT_Y7+KLQ-r`<>R-bi z?!DOEfQ#$y2i(rEp@Q)9$_cI-{t)0WhN9t7;O|sC0oYVWa78x3_7F+FTT1vtLBbd2 z5L{OM6yTu}!rzM>2E4#}9`L?lF9Lci39c_DxI6d?U~dU&_;G;XvkX586Yk9?xTE3^ zfbTWD4fsjJKLKy4{}9k=LbbKb4;sC|_vBKE=QFPIW^$DL6HNg~X698g3TEa~Iy2>! z2UOiv?K0&vab-g&LiR6?l=vky`X)mIphU|S0&fJAXyanwQvszo6Me!E(*SXbh<;&+ z>3~wqfGr00f#tww!4^Zz29$V5zY_RdKq*>bi-F(osRlkDwitNJt_Ju**n)FlK#A2s zJ@D0l662x)(1sO;=mnJGJkbQ)0hA(%zG#R(Kq>mMLpQ`0KqYuO#wOrCK#5h=X5d+XQUnb8Zb&wu6uHKEfO$p|Fl_V#mKs|D zhhRsK);D$no@wktpXig7fLmlW;0{>>c)qL!+>Q5Z@l6-m0C<6HM9&+A`_n7njiJUu z<6`4|BiAf97n%pme$Tf(7kQ6)KlUE8N_=Pg`hEZ7yVduw&oh9rCw_});(m?{r8B_v zXR-e&oGhKlQ{UMcEH?$`-Gk*;`LDv6+hE>e|7$oiK9Sds6J+{bE)#Vy(Nj%~9233N z#HcaRLvdb?Rc<}jy%GG;Sczh#+lVm`!oj|-nXwWGa#W>>Pe zJHCBJcRZOKJ*s__m^^i2d;93ogw5{i?w)CH?di7Tor`<>y6m3hY{%Z*;%w;OoapIG zPF?3po}`KMvnEosA<@@9C(*aa-pX0HloQKN6+M6 zqjZ&gg1T`jb>j(J7~jUKm>^Y*EQveGM5;C|J)JY`p7mWD`kgq}m2#vqjGmy)S`hC` zB>R>)3HdO7hVCnzpTV`Nz(-r1Ju>!a_CQl?YqIgJfJp*CYqcdNt5ighJE3uj@_#ZJpJFvFfy`ZZnk(}Du-aclGXzl46J4QJaW&`_- zs%kkFJGoLwbue%e&eZYHtZFz$pq(MwpI8#_a@LL!GrPDBac4USZbpn0k-koAD?oISiXBLVh7GOpYi+kGoJ311{9G$C3#J4H*9 zLr16Rpa{|_R>r&fX4?+M4fL9>B=N{4t;yw1ydyEIhq@=S^`ex{S;>xgFHySDNdFXpMg1_k&F*(P5+~6~e2MA(y3m&E%zHlD0@vD3AI#_h=|aJOxrg0FI%EI(+jI5~M)f6vLx zwvG1Ixry%HlT#M;Z(fHXeo{4N+ubzuPvS3(pKG6r-Gy#)D(P+1_gXe2T6-3D_4H!` zKUwIko?geM-kiWPVDsj9PbXFer;tOnSd5N#MsTFg0)3esbQ~2w#>hwB_~!duzgJi?62&E~Zhmd}F)^>l!^0$RNFxMO$MA;0i88 z|0jI2elCNyEs16E9`KMsA!J}ixMNRb(p?;^ITVT+h}!6gh{1|Z4U(SDCFFg*$|U9P z(h{L-V+MOrpmF)FJzMNeY|^ZrEnSY?L;H~xm?~%{5v^(gqww@vN3_yr$4)XoRegA# z@^tgEUK2Cze&S)M_jPSfEZ^RXrFKszILJj5?SeGNtq{4DY6~@t&csxr(S>lKO6Kha zqvS(OU~X==?yAqGsEvBHE!Lwz&ev!2V@+2tKX>RS*@f9siRkA7y936|Owgp7=;`Q6 zBsm!&NbTNQdrnI0rPVo0&9Hm7GeRb;r@HZ&KwL@MAX*S6H?Qm7zPzgs)GC_a)Bqub z`Ydx!SnTU4wnX)}v;+^COfJSC^+=W=Wn>5ws3y8#r}Bl%aVzf9DQWWYYz%Eqi1TX5 zm6_S)APm~hc4kbTI<~!?D%s=KqYdj8s)>5cgddlqBXAWL#FKq0J`jh@8_a=?gBh+! z3$K+}4=tr=xvZSZ*t*o7DB;lj!c3|GmMx5gnk2?@WNBx74gfWzS%eA5UVcSd$@@vMz(yJ6Q9w1foC>%%Z@{ z^O2^JHXU1ZU@~J?fM*FO73D?bMIo;Ho zDHf@;Mg6^-HhgO8jExCQ)BT%IC4jo{;&**l2SqC$W0~qxe)_ajJs@=>r_7o>b#!}s z5|bBt6o)v0=;myt2~(^~tVgF>+HV72)zXKb$6ANAmY`^ij_L451Q|QiNi!4c`ZsK# z0G#FxiY;k&Yah0;7_u}|CKh62fx(bYRV%C64hHa6+u4*(P$eXsxm}%zf@%J&ZCD`D zIY*l17EGf^SNr6|)*jSxGanGeyFXQGW+K_)bn%f{S_L+o2?qlsxuPrCg(@$%(`m{_ ztQMP)_%?L{l}>kU!*K8H@90Y>pa;frBIm@nr+Iqb;#sh-Yh4%Z>C>q+j?PLVP9(a! z(f2y2iKcG{*nkAyRns(wc@^`iA}IlLk|NN1k*x47v=7DlV!49{B5FTQj<&ed;H+&J z)=ZN_X%ZA_IU#tOY0ivz&53Q$gL!J(;`MISQd>>z&jg=ZOy5pU#au?5Sv?&#BYMxL zYuv0GghV(-uZ%lAM4;20>g-9Jg(C~vZX&|R)z7)5;-n@qU22R5ibj{)8foiam*ii8 z6Oa=NY174S+(Bt8PHlam;yDTEj8wK`4 zv^EkQsbvI{Xbl>jF0QsrO!XwTx?I)Ja7C&kk)~b()Vd22JsW_so02QLfMO9XFu@3W z-MN@+5}UX(>fn`E_KSOHebJ3wbsr75^g2&0qVdtqYTfN7XHF4zZ~GixDDjeXu``Q~ zomk|=NsX1LohhelRIlPS73ZBR+{R0jR)kL#JN0HhiKsW2p;nZ{?#Ca`nSHQlGkM#M z|7c(0sEM9ho2Z3Y4LjR4fp#YzoUs8T5I;7mp5#r0s?BaMZe83=N<9u;y??V9>@p%3Kq0N@1uZDBYw5{6WufC5^qH=n zj8@2K18z{&9AcggDO8*cqs0(4zTMxK3XiGrpobR8x)aObDT2!)H5roJM>2VC_sit5 z%T5tiQ>)BV#az{-Zc(IS&_;o4JD3B*2Q#`ck)&2Jslr^9ThuZ5soPQY#{NE=W`d5H ziH>v=vm1ErjrJCZJFqQ9y4BZ(WK_&82i-V*1tF**F?0tr)q$;0D_S}=Yty$17(NtZ zTvf{w>-8ZZ?TFk1K|!s|;X8xpo~I5fC?kE2WB2!F&{#Fi;FN0`ZjHx2QlO^T=%qd-+6pzzPl$ItI*?n#Oy*L=eLL$xO?rY<1xsw+1*JJOj=1ByrX*5osCUt_qd%E3uctapCJ(UzF_tG@rz?r3psbjj zxWCYIJ;uj!n`1nd>5TPm$Aj#r-k>55W5iPNAw_0%8ybh1Bo%~N-C=jL*Qmm?LIj zAA&%$8Ah^7b;QRCHL3#XGVVuWd14!aFCFw_A;AyjOFr!Za~&PpYE^2AV^tc}=e(MN zYcfxL(AG&he&(}8v0gpa_2VQAR%Q-2breokJ6pOs5=#&o_3=0h(#}^MI?vjIzO4=b z9I*;I`VecOjW@h#X2N;J-O}4d2c94^4bm)@9&|n>bc<3Drr@8MNgpn-T4gorG)Um& zWfdm$bbo{qZm;KU3+l;J7|(GIH-JXbNwHED)9DPVXG;Pj4aw?2NmY^0a?p#Y+jgs^ z_i~%ot#qr~kUlTN*yi;FDnlD1B&0~{#eC4qEv+!( zK{T-e0g3KwyOE6+v?ualI5!sybYv2&mClKkR>rvAvm6IZ_reT24YyOLgIMY^rP&q3 zGJdjNgDPK7#eEAF&wT0jDLOLpo*>*zXA+{hgCEJhlm#=p;y6=FVya2=J!fAZRGMICr1aDQfCI zL3dI2bT!T2dtFV#DA(!a*lF26PFh`yur6WT*jG@(}N*!85>Ox&@W5oQL>7P^n?Sl-r)-Mq^}Vc0RN zH*>Hl;I~$|J$RB~O77EFyTW!ad1?IWD`SjM zT2P31XD1zEXWYVK?xqWa6S)wi4G=d!Zd3Y_Laz^1W2St=w!5Jt&82obncJz~OiIhq zY~;#muh0-0EP(F$scDPso=;0&i5n$*Yf@J|tupSmEBg{xHA&PC)0{e9)-*em7my-z zEvwd)YRT8qy*0jFwG$TO2tTQz$|Pw(FJv4&6DRuuQyz97V)43jQ5M!LwAN28N?|9R z6H%kN{R=yF_OF_+c@$|BLaAFN&Ej(jji)Dh(cXvpYCR}lUs|%R403%sh3v*jtb2pW zl9@C{Nh)oo-Pe;gH)A-YW?RgT7+~lQv;(G{epg3VAI_g<;#M2=q@lsv;JIBJHZJJe ztSMMVS7@RQ(_MFBv7^Vopkw+pHM`5nB+2l(C<|A5V!8XY&%!GTSYmIXo2DKls6|nl zp(BjbvH<~2O>vnqkQV4FiPWphTNTdu9v6oR2@K8z`iM^JQ2aIwQ|MczM@{PW7xaYm zX3j}xP@;&TI`OsLmuhD^uncSkZC;Kb#QjtQsA?Jjhv**-(; zzbJ&=rQTQh|0*a`bn?_O?d>>~fff)uEU;qUI9C1&9 z8QefYL`1<|fm{L+*+ki7Q#5nH+{(4oQgf@!)LhFYO-)Np&9u^T$y_tjT*%B_-|utI zT<**O)o=Uv|9#$<d7e?BDGc5Q?0fSV=yUJOSI+;`CV0&h|Y=mc41I- zVOc>jg(?e%F?LrA3=7N;D(an=Qzk^^m0`{4#KDZck2V6Rj z84X_`t(Y!1&yIY^@!=^YLI=!XA*IFS6_pgi`7THW;Fl5lGb_z}9G8bDN)R?e4)F{s z$sbQ)%#zM>v-6}A@u`oP+yY!iqQaCp8a)*qQqo1vys8v*7Ppuc?4T?N`!iWeefHDqZIRbG|q&&sb~!mC`K2s5G`ck z?GDW5HKyxPj#|ydKZ2}yPCpM+(LR&Wo(G!stQJb)6zcKB{#d+|Fpl0XQKh0pI@;|6 znln%a_pk8wNeNmd&Iq1eP){NHnqish-KUCo&#^0tP&aWy@Z|MST|`$ZXa^taN;Sqa zx_FI3-8i&E6jS+Vlui?dQTb;q`Su*+Qas)z=?xkz^Mdfc7;&&FkIALLq9=iO~H?BdbSwQk`@a=?Je8vPTUlZ=36nPIZ#K>`-QwK~t_6DZ zg`_FUhU)?Ee=eva?IM}ALwT+bvZ!82!TZU$hI*VU3dl&&2E+&wgea+XJ?gE! zc9IEQOFBomQebXHP~hFIW-&HxOLggSRYVmxgw~Q4h?-$pRw}8-n>b?y;v1Htnc6&o zsj;4QMufVdwJ=MM&gbKWu{?-8A6-gkq!*iO$UzD*h*(@*9rB^{)~#spDi<7MCNK_0 zg;phq$u$eD9bUn->~3x4^mrYtHy|{@3=Hu?GFo^Z*V6E^9%3&D;WjGV0i`wg?af5O z2SO2sf(B|P4So{CKlV$llgbd6h<988L@?pC*9K63-jd~&G{{A0<3qN(1oe=C1Wz0Q zNP+~+G%;|wWr0efwFENZ6xIxqe@-9ONcuyN!G~>4R9e!++mm`?3#j3M{6xG`$fwYF z$SV2HI^?_|y0Y2G6i2aT|G3G+ zsi4t98bNZiol1ySZbXnybA1+#jDM9!G%=>5MZyN6k@KbYJ`u-qP?nns1jZ!!QJ{*a zb3PU!JsabiU_Bjh&3PzJ;WbO^k5X;5hT0UlLXe)0Gmeec7+4!}5j}*L|LiZ(BToF{ zC?m`!z2e*v4XO5w(j0Io6|yC|tM`Sdp`3sAm!?QE^*H9?5e+6$YMJCp(>j?T5;6qg znC1p<9+2$FxRmAy(k&`28Qw%;DboJgUv6xWG^kagjEn)A>+~==xbaz=am4B7Q#kHk zqcrtZ)G13UCHEj4vr-gBVywkDw57c>YhRjcEj33po5WFzNHy9_1E*;GlTMQy$ra&d z3-zF^iY78fB(u}D-9I{ygA8eQ5J#EVKA{GUHE}kl7W8N@5A72s6oHx%*o&sF$Q|xT z5i*l;MspyI^HglfrI9eII!)r0A_cZu%Xv@}nvp)yRUFr7G|*f|=s@xojX6$3NtN3~ zroS_ALU0hN6B=38P8dZpAS9$M$%1SlA*ypNITDf+K5>qTs3{rGFeObBW55tTOsFWC z45VUuq!D|`oXCLs*G@V$C0fsag=mR1$?_Lk55_7)MR!tWF8$m|G7IoR(h!lmZ`rem3SuGL{}m$o zK~wVZE4CnUfHX1{>7@6hN#Y>3(15^Bte)yVo@h?dBtpZSY7p{iSc*Ex>y*rz>g|g% z;@%TQMw&r`^eiGlgPqqbUPpRf2gL+y|6$=g)S`S@$=HdeSHXr3s)pw3CcDoN~j@?Bz#y zF-wb2n*{weUu8`>$+Ofvwgi_%7_Qy%-y17^^b&-=y};M%6jq=7NLM8TQ0yglJm`$3 zXV#YyJs9=1IjvG1q<@5C+|U&%6#GUP&<^o3TA!=|bb}^5LN{tL9oR@?iTFm7ut<$$ zY+4$KLVMe3Uo0=i5I7|?O-fXld(%A@y&=P;x)CQ%y)+4vg#MJ;X0_2#t<@;olK*g9 zZK(#5ip0-9rx2PLCh4s-KDqu;O=N-)Z#g~06K;g#%Kp-odPH5ThZ#h!b8Py{Tr1Cz z0;e?z!4kv>KH{KO+z%ET?8#V>&w@;d-lGF#fs$=b(`N>L3I4dRnvI+SlqtkHrIAfU zu)xa@C{Yf#3CZ%O9L^L8#KlRX3F^wn(m!M-@IYA;b30@k(F8$P60mVW(O@QlaV4k0 zO+DZ(Q*exWPr>3;(3FFgskhbxfbs~Ahhk4)R5QOsvxWFdL8~UHN!FM9$D%nwG!Q35 zno3#C98}3VCmxeEoQYrJiRg(GgHE#9Fj1@WLC0`GP#6RuX0X|up)e(d%{w4wlnV1= z3~cs5EVGmhgQr)N;K;um$!9v#nQl#fFvEQ6f@~@|J{1hCR(g+2;i25 z2>G11mYyYXm}`MF5@bEYVIGb~uSt`v0Y3r;m=Q8HU{C%aO{U}@at=@~d3l-Odnk@0 z!DCsyaI@BNLy1D`L=TV9b%2o)&U8WYN8%Z;c>tcg3c<8SbST2HW)WGA2`IwRhdUu8 z1Y$IuQFNNRNQz1w=mnCxBArT*(n$?j2h(W4kh0OhqE1WoQ3q(=CWQ?KK@?=-!-ofY zxGSP(l%d1VNYqN#>DiS+nv}=y)9BeuUWV9k0N7|9u1#U|@|ivb^mDt57%vSOx{hNg zr4w~RgK+Gvds>a9V0!Q$i=~mRb!V-1X1l@JGF33WA`;1kV`)qhL88$@BDB^kn&v{- zR7`ndErF~X++4BjCY7-q8>CqzAU$IS;Z6XS?-!?*K%^4_aq}QukQGH&oprWhc|6+Y z`pJ!C3B^f0D4xeLmESVrF)G4M8b{B*xlKF2pd~TDV9sqengmhFRXp5``sB z5|;KGhcu}rTwhe%^?!67jaGsuQqE#bO+=w+r&-#+(p@+{&ayEwF^$0z&xb-vHet=Z zBcK+iK`WX)#Xbfy4B-=`Y?L%GB&$daFp!d4-)ABv%mnqsy_%+AKAH2D$U2XM!b-i6 z`YXhXgMdSKZL*T49Z^3DnXx1CO|;xdqlCVaMJo+SKIzoXE6Gl;LCypJ@f!c421WJ< z2Q4RWu}6|7NPVb*vU=6ai*hA@Q)Ze?3>Krhe9k4SsrqGNGc>H|3d`6UHOx_zyRBqh zQn-PF7UEroQ8pc+PLciAAGJvxgaX%>RE;9UL`eu1?Q4V5#hCAL6V_3hECokVLEx}D z_CZ;W-hy*iRx7`|Bn*_oCp^$%dGCpbNOCdNWTHKCsq#Y~Zq#nO>v*ipn54!lV}D zPVq^^))nG*IXR0YGO|N#ONhph=z8$UiqH0Bjqs;nxWKptPe8?CNtTshK_X3kVl0E( z3I9l4G@bE&kPTsJonR1-tgRhe1?TNjbb<6me2Pf4sw~yEIv<+C807tgofReaxGC#v zb-g6MNt$UrHM5&AF}2YwNrJ+4JX%c8ok)>Ii(8G^ujLGZjA3Ggb| z5y%P(+|D=O7`J+e)S(pIppb?TW;>aW0v3!i!!sW;K}@5v;OWpqxY^j3Qd>qYS=%t9 zZB&nZJad>MI1*Qr8-TTG&^A^9W7}@<&chR*m)25>r(2v%?cyqv zQHnpV4#QTVk!evOilA||yMV?9%C&Mky^{h^o z;zaH0lKGW&UFC8{Hp?f}T_=)|q=V`=c z8TFoVP_5CUh8Xlljb6!RYPCwG)N1{-=)K^laL~*Bw0;V=@(6qCtSj}LiV6z!)~!6o zP9@j%g-`@tUps8dw%Kw0(ozU*>Pc41aW->44l`qd-Br0>z+fdO7se)m_Gzt;@CpgZ=E}_MjiRS_fB| zc>p+pVADiTH`7$mq0uYBCkRR{r}0IJG$dH20}U%CBYO-rooO!h&@`7bWICOcPh}^j z`A#Z(w1J9Di*&gvQYN?Z`A`PAE|+m@krtK7b*5$b^Q@+%G%OjHmtjn+)vTG73XMuF z$C*~GP=NVjGDeY1p=Nzp$zcLx2{o@&s9jXx1;#Z_=t2cmXsMxSNa`KvTK)0?_Jx(H5JfzEV57Xj$fnZDAQjW;Foqx?ECBHH{oK*Vlnet9+ZQbUM>g(0U$aw7@`}X|J2F^Zf?p9|>MS>?bkRI9;EIf;PyrVH1o?0^AiSr<;K z1~>pUYOMxC-!zw4tzn?3L8?aU1T^fZ>&TKdRELIGSqbjkQPBnWp{Nj3`57g)+2A>J zQcheb|B<+WVn7CL(Gu+(P@QS7TCU4>5tLNM&GguuAFg&nBUg1y-~F9u`pvq22@cro;@aHzr;5x!}xgL@dEZWYd~Jv0Eu0Qey)dw@H3 zgihf!c-3l+N{L*kHpH!$V@TK&C_|4iH)&NMjDA?#TWRjBBvgeWeayC>ul>xey#;zn)dpWu$Bg5 z3>!~(fXg%w$sZ+!3y=3F-gyPw>mdfy*@H!yxVb2yM}#WDv7b#PB5Ry z6en|%+$!-sCXH0c^llXFOR|WppGPIVKhYg=Ozf}8(zyTBkcv~*IdQ_r8K zRnpgZlrq}LX#-vg7;Gw&6Wzh3+m7@?o-dtPz6fLaKAsO{@_thY*)q$crf2m0sXTdC z+3#+|$fp$@l$ZC}&$=)#y!T_yqY&eV|(EpO<1Ny=m$1@WlK#;#)-43KW|_((5k z+P;Kok(DA?zn?k4)`R$W-Tle@PgQJv^T#ylKi5t=Bxo60`J=lxrdR(CIwZZRDXwao z^LNlB!Ai{`=ulgt{;JPvsM%qx-DUN!`2x`cZT!dCq63Pr*4gV?DD2%D%I)R$m?2>V z&<+!-(q3npPMc+Ndo|L?Qbb{c1I?o_t950Rxfe+td9H@#FarjOBbD};JaLeK|0Mj! zQt>G&Tun};Guw;KoD(}UyK1}$oFSB-V>V7p=-;X!8!v`q055 z9E8)sheQ%L9gtLje=kZt!7Iab4fjl@Ya!Pqz&F8xF2O^vBR3grfH@kaOJIjEm2?qW zR>VUWVcth+=o0Qyv%?mQZ77TCu+{1kU_8ljA=yykE{a=Jx;{vh=|++jrYm9FGB^TC zT&nYeyNLw@$n0wY;{s&i(5)dIx;0dhs}JhbIAaGaf$SfafCC5A=v76w7uqAcf3}*4 zNYI()jTCR_ADpgy2?Fk~s)7j3}OGwnvlC;>-Q1TG)8IuA4_BNDHn z16OaiFm2jMmw} zV>6)KUx4FkC)1%A+yw{nVNshF!3%SsLzj#=jX5ep?c1Sl@&j-Pw(G(6Ts7$!g_&>) zzLC>OMmGo{B4J%Bn?g0Qfhd~_a#d5Vl57txL7JA1Nk5coDg-4!qM9!2XwK1S)KzS^ zLm|^0${k6Y1llCgCKgxus%7}TIsN#{1Q|Z@U5A!T#e!i~E68HKax4%gLpieI1bp>U z@Ty^v!vw53jN2b|WrD7HE+TRGXeUd@=W=C2e3U+2{D4Q99xLyqW@QxWvA&i*s8>va zeiYUT)fe&Aa9L`v609Mj$0{lG{fr_#zLlZJ%2;|VSw!FK!TQn}MTl`b;bWk!gF=jL zg79E)oJ{bc%Bt4RZ(&~2C!(}fP;2y5>rs_u{#YcfAgp5qRORSV7BzLQ-X-f*9W55X zW($)vXWz&Zmt!=4J&v(Y_+m$|WI7^l`ocOs2eQxIz?XpIJI9xn9Ixy!Bs^;KUS0Z6 zzhx(o@f_VQ35&vKBry__iVD;Ck=44CNm$N2$-FRlQUQJK#CjR}g7l%(k77S-!lgr2mO3%q*mppAG=sQ|p{C{WvMI4ahd)`b9 zOkUXc5d@Pp@dRc99z(C5PUTFrvHIcVhgHksdgq1db(UTxOd%iE{4+(-3P;c3^?X~u zD22Ve-vw_%(a#R$%_p=#(Fug<=||j0vNO2E*z;D*3D|XJY0trx#9G8=Z!wN}kol}o zLv~dHaw$Ym1bydkts#CIFh@%D zS^L?PZyg<>_UTLFBr&?pOV4P~4b@)Q5;p}}tSy6f*{)Oc$JbFL3cP736Ruhepqtxwg-4Fg&C!?gFC9b#7=sJ}dVDI3 zeOe_V0ADN(3=Pm1Va3+;)SUdhjEI1;jG}`I4O}eQ|-ehsyN&s>=vhQdZGcE>kY; zUI4ESoQsrB6lVGTCah=lRiz&ui>()%TI;hR*JBLaRcYL@w>+_`*K59dS z@+CusB4?>Wj^_kiJNf)N$KfUKdi^xr_cd(1qPxMliYl2M+Rta?C=!+S?(+B;qlZCf zj}wi%BbM95hsBDD^--OSjSUSc)zRIrDi!OAvd^jM6B7F9&7Yw%1{m~IPT}rdyuiW_}6tdv^KOcv^9hp!iDhSn_&MnkL6mZ5_T<#R14N{kmz)b8@c1Y=!; zCpDmQ*T$#j6zhAyhtx-7Qi{@+gSnscqIvV;7~XWvSmtaSL@u*mD>*Eg>6eH8WevNnevM$F#!)5(I? z4=(*Q>(hmAFZ?F_j&A;_4O<+}4ZG~S_4b^!DZ__9aV$Ns^S6LYSs$(T89ZwDMAaGR zoLx8U_m3JLwRnZgcMosOsk`OT#GUV~{>;~S=DW>bUAlGiY@L}K`@QzvvSU-1se*Rl zZg?kupYtc?wmO|&*7WJNAh$g~UU~l2*oR#m_vD;f6EY#{_VOR23La<7%6;&l?`QXS z%xmtgZ1GL*itlfY&!3QSVfgCFlS<@JRN33*zZuFa8L#~sD7_4IOde}?yfLQLhmG$( z_^fflO~sCL4G$&w82rF#KdrKk(&NK}*>#GTBq5 z5?X9;aG`T|I=3?@urs((f?laHs15e^N*oG?&XiP78DVH|2wU2AY3oTX&5}+l%(0eq zu&A7(4o63kW(J|4p|!ml!_f}6gk{QRh9-ta;<-UK$=h6Eep*q1b&Zyafk6eukO@6I z1;4xdR{S}kDcV2k$LdTfKw;RVbAO2Eh!kA;7PCfc&`1Z^f4=%p?^Y-sm`#*iP*M#u$ zxFxS14{^8}7qrZ6tcRB`|yo* z9$weq8T|XyIWe~qmEF!fZF0uGTgTr&{J8Rx%Y6Cv$I05Drn`5xPw|O--Swr9>vTBr z_M2&bnTL{6PIb8LqH$;)aQgHok;47U&dFI{JznasXnwNe-JM@d&P*`9`}Wp5-b0Un z-FU+rjc+VC)OkhBpz^t%K6m;8hb{w$zBJ>|(4?NTrXBC}aCOk~qR7ewZyT2Ve>>~} zS4KcnNLvH@sRmbLM1TT*cI{+*#^4P-RI1%|=8x>@d*Txf_^J!g(&)+*8|bA1dLfLM zZuBvDQE`pCTXgT9y*u~T10~tg`5Ea(y}_UI6z+A+dGw7eJr+gB$7J%dQ1VY9X;nq# zODms0F>=$_$<43-=B{_Tzwqa;W)=_5yK${q?1|5Jwz#HA9rDGFSEs*lrg*z%@vvU2 zN*We5S=;uuPsQ@wt)Dw|>G9&S2|r&@40)%%Ym<%(2A-9n?HzOWP1!a#=;qQcF<~#f|MSH)SNgx6 z^5o$jhv`pdELa{nu*;+UfypmTzLh_q@u#;sJxcr`V`o-q+6QhMmNmM*a^cR{vpq(A zvdY_W^W$zaTa+bkcrtL%pxne)e4~HgkXYDkYR`_5JIBY#lEW7!sUIG^P~vI#+9LJP zr`w!Que!Hsmutwu!mH}WhrKx@Rmi%5Q(de;sYcY1Kq)<7(&lbc4=7!ZDhIsU{DZs* z|0X%rK#3+w4oUzafRbD$7~CnXkimj0<7}bgJ$0xRw=qOZI{4XG#+kuGlc30YGynmqBsMvC9 zLg>C%w>>_5?{wP2asIR3dE@hw1BSKQbjz`R{NjOK9;Zz_`=sltf=iKu)pMJscvL

e>8a9(|LndD85~o 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

^vZiTeZ2`9Brp z4!oE9tkZb!At_D^rsNpj@8>Y9&NEM&FFJixe{ky6rZ0xf@IE^>wx$1f8TZy6xHrM$ zwbF6vM`wJwv-P;Ag~pys7Vq%S34U*;lYO6u)0%uxdf>Oq-+kKZ!nDctC#62wl~{bf z{wRfJSkCrK2UcD_GO*FL7k-J+mSqmR5^#9y%{M0YoaYwq@bb~|A2)64{&4uggz2v) z9p01ihW+9%W1l~^sqJfBqFzv)Ir1R-=C-WVr{m(zZ8wZdGF`k}C#?GlV}-ImZ1Q-y zOlByb{Wsg(a@T4;fpiaSX@SAj;+~h2k^D~Ys@qf!3Zs)nwi0)Gq+4c=%sQ9OJ>kQN zcikM6M%-X%)pbbaH(#gjU*_0l($XiA3MCg!_GOk+1^oibkC1I-hPDl{yFcAOaE@mktGeU%-!B<%#cPipL=J>(yW)i z_4?-7IU7n3cYASImr!}-?vLii$bbB9weV)RzWI{01I}lfb$FEfl~Z}=#UAfZTzYCj z_YJlSM&W}{JP*|yC&z3?&_}E|N7*0-4efDG&!$#9nGol4=#N6 zL0E%c`ufimUa_Bj>`rv-?21vIzpY7F)$02mbGjF=ee+boo6QcjX}sl~lrQZ*{C(Kb zZiB+QemkVe!dI46$eS7}C zzqD&k&)k#|8{3=^V(bjA8-MzE{IMd}?@KS5{&->NA84z~)p2PF?g;q0@@0K3*Up#r{#tU=4TRdk% z!>ggw!UhfAu=tmdC4MJUOJ;O+ANT9Xllf03Zx8>jf%`{oCmrtcctV5o1HS8Y;rZrS zqldS@b1rQ8z`$bp - - - - - true - $(MSBuildThisFileDirectory) - $(MSBuildThisFileDirectory)..\ - $(PaketRootPath)paket.lock - $(PaketRootPath)paket-files\paket.restore.cached - /Library/Frameworks/Mono.framework/Commands/mono - mono - - - - - $(PaketRootPath)paket.exe - $(PaketToolsPath)paket.exe - "$(PaketExePath)" - $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" - - - - - - $(MSBuildProjectFullPath).paket.references - - - - - $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references - - - - - $(MSBuildProjectDirectory)\paket.references - - - - - - - - - - - - $(PaketCommand) restore --references-file "$(PaketReferences)" - - RestorePackages; $(BuildDependsOn); - - - - true - - - - $([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)')) - $([System.IO.File]::ReadAllText('$(PaketLockFilePath)')) - true - false - true - - - - - diff --git a/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj b/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj index 17447a7d7..b61ad2765 100644 --- a/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj +++ b/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj @@ -28,7 +28,9 @@ - + + + @@ -37,5 +39,4 @@ - \ No newline at end of file diff --git a/src/GitTfs.Vs2019/paket.references b/src/GitTfs.Vs2019/paket.references deleted file mode 100644 index 220c1c82e..000000000 --- a/src/GitTfs.Vs2019/paket.references +++ /dev/null @@ -1,7 +0,0 @@ -structuremap - -group VS2019 -Microsoft.TeamFoundationServer.Client -Microsoft.TeamFoundationServer.ExtendedClient -Microsoft.VisualStudio.Setup.Configuration.Interop -Microsoft.VisualStudio.Settings.15.0 diff --git a/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj b/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj index 17447a7d7..b61ad2765 100644 --- a/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj +++ b/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj @@ -28,7 +28,9 @@ - + + + @@ -37,5 +39,4 @@ - \ No newline at end of file diff --git a/src/GitTfs.Vs2022/paket.references b/src/GitTfs.Vs2022/paket.references deleted file mode 100644 index 1cf84437d..000000000 --- a/src/GitTfs.Vs2022/paket.references +++ /dev/null @@ -1,7 +0,0 @@ -structuremap - -group VS2022 -Microsoft.TeamFoundationServer.Client -Microsoft.TeamFoundationServer.ExtendedClient -Microsoft.VisualStudio.Setup.Configuration.Interop -Microsoft.VisualStudio.Settings.15.0 diff --git a/src/GitTfs.VsFake/GitTfs.VsFake.csproj b/src/GitTfs.VsFake/GitTfs.VsFake.csproj index 142bc5fcc..f33172334 100644 --- a/src/GitTfs.VsFake/GitTfs.VsFake.csproj +++ b/src/GitTfs.VsFake/GitTfs.VsFake.csproj @@ -11,5 +11,4 @@ - \ No newline at end of file diff --git a/src/GitTfs.VsFake/paket.references b/src/GitTfs.VsFake/paket.references deleted file mode 100644 index cfcfcec02..000000000 --- a/src/GitTfs.VsFake/paket.references +++ /dev/null @@ -1 +0,0 @@ -structuremap \ No newline at end of file diff --git a/src/GitTfs.slnx b/src/GitTfs.slnx index 43aeaf3fc..abdf51568 100644 --- a/src/GitTfs.slnx +++ b/src/GitTfs.slnx @@ -2,10 +2,6 @@ - - - - diff --git a/src/GitTfs/GitTfs.csproj b/src/GitTfs/GitTfs.csproj index c72d80d34..6de90217f 100644 --- a/src/GitTfs/GitTfs.csproj +++ b/src/GitTfs/GitTfs.csproj @@ -24,10 +24,14 @@ - + + + + + + - \ No newline at end of file diff --git a/src/GitTfs/paket.references b/src/GitTfs/paket.references deleted file mode 100644 index 9630dcaa8..000000000 --- a/src/GitTfs/paket.references +++ /dev/null @@ -1,3 +0,0 @@ -LibGit2Sharp -nlog -structuremap \ No newline at end of file diff --git a/src/GitTfsTest/GitTfsTest.csproj b/src/GitTfsTest/GitTfsTest.csproj index 757cd503f..39866c953 100644 --- a/src/GitTfsTest/GitTfsTest.csproj +++ b/src/GitTfsTest/GitTfsTest.csproj @@ -12,6 +12,7 @@ true + @@ -19,7 +20,6 @@ False - ..\packages\xunit.runner.visualstudio\build\_common\xunit.runner.visualstudio.testadapter.dll @@ -50,7 +50,13 @@ - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + \ No newline at end of file diff --git a/src/GitTfsTest/paket.references b/src/GitTfsTest/paket.references deleted file mode 100644 index 6b6671cdc..000000000 --- a/src/GitTfsTest/paket.references +++ /dev/null @@ -1,7 +0,0 @@ -LibGit2Sharp -xunit -xunit.runner.visualstudio -Moq -nlog -structuremap -Moq.AutoMock diff --git a/src/build.cake b/src/build.cake index 649b1a4e6..b4bbefb61 100644 --- a/src/build.cake +++ b/src/build.cake @@ -120,13 +120,6 @@ Task("Clean").Description("Clean the working directory") }); }); -Task("Restore-NuGet-Packages").Description("Restore nuget dependencies (with paket)") - .Does(() => -{ - StartProcess(FileExists("paket.exe") ? "paket.exe" : @".paket\paket.exe", "restore"); - StartProcess("dotnet", $"restore {PathToSln}"); -}); - Task("Version").Description("Get the version using GitVersion") .Does(() => { @@ -188,7 +181,6 @@ Task("UpdateAssemblyInfo").Description("Update AssemblyInfo properties with the }); Task("Build").Description("Build git-tfs") - .IsDependentOn("Restore-NuGet-Packages") .IsDependentOn("UpdateAssemblyInfo") .Does(() => { diff --git a/src/paket.dependencies b/src/paket.dependencies deleted file mode 100644 index 13e79214a..000000000 --- a/src/paket.dependencies +++ /dev/null @@ -1,47 +0,0 @@ -# pin paket to a specific version so the build is really reproducable -version 8.0.3 - -framework: net48 -source https://api.nuget.org/v3/index.json - -//If you plan to update this file, you must first absolutly read our documentation on the subject -//because there is some subtleties on how we use it in our project: -//https://github.com/git-tfs/git-tfs/blob/master/doc/paket.md - -nuget nlog -nuget LibGit2Sharp 0.31.0 -nuget Moq -nuget structuremap 4.7.1 -nuget Moq.AutoMock -nuget xunit -nuget xunit.assert -nuget xunit.runner.visualstudio version_in_path: true - -group Build - redirects: off - source https://api.nuget.org/v3/index.json - -nuget Cake ~> 1.3.0 -nuget Cake.Git ~> 1.0.1 -nuget GitVersion.CommandLine -nuget opencover -nuget reportgenerator -nuget xunit.runner.console -nuget Octokit ~> 0.52 - - -group VS2019 - framework: net48 - source https://api.nuget.org/v3/index.json - nuget Microsoft.TeamFoundationServer.Client 16.205.3 - nuget Microsoft.TeamFoundationServer.ExtendedClient 16.205.3 - nuget Microsoft.VisualStudio.Setup.Configuration.Interop - nuget Microsoft.VisualStudio.Settings.15.0 ~> 16.0 - -group VS2022 - framework: net48 - source https://api.nuget.org/v3/index.json - nuget Microsoft.TeamFoundationServer.Client ~> 19.0 - nuget Microsoft.TeamFoundationServer.ExtendedClient ~> 19.0 - nuget Microsoft.VisualStudio.Setup.Configuration.Interop - nuget Microsoft.VisualStudio.Settings.15.0 ~> 17.0 diff --git a/src/paket.exe b/src/paket.exe deleted file mode 100644 index 092b994f52386970225abc8f63929e3752499207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87232 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 z 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 z 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 Ke}#?d!2bb_H>J`5 diff --git a/src/paket.lock b/src/paket.lock deleted file mode 100644 index e9d4442c3..000000000 --- a/src/paket.lock +++ /dev/null @@ -1,1051 +0,0 @@ -RESTRICTION: == net48 -NUGET - remote: https://api.nuget.org/v3/index.json - Castle.Core (4.4) - LibGit2Sharp (0.31) - LibGit2Sharp.NativeBinaries (2.0.323) - LibGit2Sharp.NativeBinaries (2.0.323) - Moq (4.14.7) - Castle.Core (>= 4.4) - System.Threading.Tasks.Extensions (>= 4.5.1) - Moq.AutoMock (2.1) - Moq (>= 4.13.1) - NLog (4.7.5) - structuremap (4.7.1) - System.Reflection.Emit.Lightweight (>= 4.3) - System.Reflection.Emit.Lightweight (4.7) - System.Runtime.CompilerServices.Unsafe (4.7.1) - System.Threading.Tasks.Extensions (4.5.4) - System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - xunit (2.7) - xunit.analyzers (>= 1.11) - xunit.assert (>= 2.7) - xunit.core (2.7) - xunit.abstractions (2.0.3) - xunit.analyzers (1.11) - xunit.assert (2.7) - xunit.core (2.7) - xunit.extensibility.core (2.7) - xunit.extensibility.execution (2.7) - xunit.extensibility.core (2.7) - xunit.abstractions (>= 2.0.3) - xunit.extensibility.execution (2.7) - xunit.extensibility.core (2.7) - xunit.runner.visualstudio (2.4.1) - version_in_path: true - -GROUP Build -REDIRECTS: OFF -NUGET - remote: https://api.nuget.org/v3/index.json - Cake (1.3) - Cake.Git (1.0.1) - GitVersion.CommandLine (5.12) - Octokit (0.52) - OpenCover (4.7.1221) - ReportGenerator (5.5.7) - xunit.runner.console (2.9.3) - -GROUP VS2019 -RESTRICTION: == net48 -NUGET - remote: https://api.nuget.org/v3/index.json - MessagePack (3.1.4) - MessagePack.Annotations (>= 3.1.4) - MessagePackAnalyzer (>= 3.1.4) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.NET.StringTools (>= 17.11.4) - System.Collections.Immutable (>= 8.0) - System.Memory (>= 4.5.5) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Threading.Tasks.Extensions (>= 4.5.4) - MessagePack.Annotations (3.1.4) - MessagePackAnalyzer (3.1.4) - Microsoft.AspNet.WebApi.Client (6.0) - Newtonsoft.Json (>= 13.0.1) - Newtonsoft.Json.Bson (>= 1.0.2) - System.Memory (>= 4.5.5) - System.Threading.Tasks.Extensions (>= 4.5.4) - Microsoft.AspNet.WebApi.Core (5.3) - Microsoft.AspNet.WebApi.Client (>= 6.0) - Microsoft.AspNet.WebApi.WebHost (5.3) - Microsoft.AspNet.WebApi.Core (>= 5.3) - Microsoft.Bcl.AsyncInterfaces (10.0.7) - System.Threading.Tasks.Extensions (>= 4.6.3) - Microsoft.Bcl.HashCode (6.0) - Microsoft.Bcl.TimeProvider (10.0.7) - Microsoft.Bcl.AsyncInterfaces (>= 10.0.7) - System.ValueTuple (>= 4.6.2) - Microsoft.Build.Framework (18.4) - System.Collections.Immutable (>= 10.0.1) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Text.Json (>= 10.0.1) - System.Threading.Tasks.Extensions (>= 4.6.3) - System.ValueTuple (>= 4.6.1) - Microsoft.CSharp (4.7) - Microsoft.Extensions.DependencyInjection.Abstractions (10.0.7) - Microsoft.Bcl.AsyncInterfaces (>= 10.0.7) - System.Threading.Tasks.Extensions (>= 4.6.3) - Microsoft.Extensions.Logging.Abstractions (10.0.7) - Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7) - System.Buffers (>= 4.6.1) - System.Diagnostics.DiagnosticSource (>= 10.0.7) - System.Memory (>= 4.6.3) - Microsoft.IdentityModel.Abstractions (8.17) - Microsoft.IdentityModel.Clients.ActiveDirectory (5.3) - System.Net.Http (>= 4.3.4) - System.Private.Uri (>= 4.3.2) - Microsoft.IdentityModel.JsonWebTokens (8.17) - Microsoft.Bcl.TimeProvider (>= 8.0.1) - Microsoft.IdentityModel.Tokens (>= 8.17) - Microsoft.IdentityModel.Logging (8.17) - Microsoft.IdentityModel.Abstractions (>= 8.17) - Microsoft.IdentityModel.Tokens (8.17) - Microsoft.Bcl.TimeProvider (>= 8.0.1) - Microsoft.Extensions.Logging.Abstractions (>= 2.1) - Microsoft.IdentityModel.Logging (>= 8.17) - System.Diagnostics.DiagnosticSource (>= 6.0.2) - System.Memory (>= 4.5.5) - System.Text.Json (>= 8.0.5) - Microsoft.IO.Redist (6.1.3) - System.Buffers (>= 4.6.1) - System.Memory (>= 4.6.3) - Microsoft.NET.StringTools (18.4) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - Microsoft.NETCore.Platforms (7.0.4) - Microsoft.NETCore.Targets (5.0) - Microsoft.ServiceHub.Analyzers (4.8.55) - Microsoft.ServiceHub.Framework (4.8.55) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.VisualStudio.Composition (>= 17.12.20) - Microsoft.VisualStudio.Threading (>= 17.13.2) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Nerdbank.Streams (>= 2.11.86) - StreamJsonRpc (>= 2.21.10) - System.Collections.Immutable (>= 8.0) - System.Text.Json (>= 8.0.5) - Microsoft.ServiceHub.Resources (4.6.2052) - Microsoft.TeamFoundation.DistributedTask.Common.Contracts (16.205.3) - Microsoft.VisualStudio.Services.Client (16.205.3) - Microsoft.TeamFoundationServer.Client (16.205.3) - Microsoft.AspNet.WebApi.Client (>= 5.2.7) - Microsoft.AspNet.WebApi.Core (>= 5.2.7) - Microsoft.AspNet.WebApi.WebHost (>= 5.2.7) - Microsoft.TeamFoundation.DistributedTask.Common.Contracts (16.205.3) - Microsoft.VisualStudio.Services.Client (16.205.3) - Newtonsoft.Json (>= 12.0.3) - Microsoft.TeamFoundationServer.ExtendedClient (16.205.3) - Microsoft.AspNet.WebApi.Client (>= 5.2.7) - Microsoft.AspNet.WebApi.Core (>= 5.2.7) - Microsoft.IdentityModel.Clients.ActiveDirectory (>= 5.2.6) - Microsoft.TeamFoundationServer.Client (16.205.3) - Microsoft.VisualStudio.Services.Client (16.205.3) - Microsoft.VisualStudio.Services.InteractiveClient (16.205.3) - Newtonsoft.Json (>= 12.0.3) - System.IdentityModel.Tokens.Jwt (>= 5.6) - Microsoft.VisualStudio.ComponentModelHost (17.14.106) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.VisualStudio.Composition (>= 17.12.20) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.13.39273) - Microsoft.VisualStudio.Interop (>= 17.13.39276) - Microsoft.VisualStudio.Validation (>= 17.8.8) - System.Collections.Immutable (>= 8.0) - System.ComponentModel.Composition (>= 8.0) - System.Memory (>= 4.5.5) - System.Reflection.Metadata (>= 8.0) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Threading.Tasks.Extensions (>= 4.5.4) - Microsoft.VisualStudio.Composition (17.13.41) - MessagePack (>= 2.5.192) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.Validation (>= 17.8.8) - System.Collections.Immutable (>= 8.0) - System.ComponentModel.Composition (>= 8.0) - System.Composition (>= 8.0) - System.Composition.AttributedModel (>= 8.0) - System.Reflection.Metadata (>= 8.0) - System.Threading.Tasks.Dataflow (>= 8.0.1) - Microsoft.VisualStudio.Composition.Analyzers (17.13.41) - Microsoft.VisualStudio.GraphModel (17.14.40260) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - System.ComponentModel.Composition (>= 9.0) - Microsoft.VisualStudio.ImageCatalog (17.14.40260) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - Microsoft.VisualStudio.Imaging (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities (>= 17.14.40264) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (17.14.40254) - Microsoft.VisualStudio.Interop (17.14.40260) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.ProjectAggregator (17.14.40254) - Microsoft.VisualStudio.RegDetour (17.10.34916.79) - Microsoft.VisualStudio.RemoteControl (16.3.52) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.42) - Microsoft.VisualStudio.RpcContracts (17.14.20) - Microsoft.ServiceHub.Framework (>= 4.8.40) - System.Text.Json (>= 8.0.5) - System.Threading.Tasks.Dataflow (>= 8.0.1) - Microsoft.VisualStudio.SDK.Analyzers (17.7.113) - Microsoft.VisualStudio.Services.Client (16.205.3) - Microsoft.AspNet.WebApi.Client (>= 5.2.7) - Microsoft.IdentityModel.Tokens (>= 5.6) - Newtonsoft.Json (>= 12.0.3) - System.IdentityModel.Tokens.Jwt (>= 5.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Services.InteractiveClient (16.205.3) - Microsoft.IdentityModel.Clients.ActiveDirectory (>= 5.2.6) - Microsoft.IdentityModel.Logging (>= 5.6) - Microsoft.IdentityModel.Tokens (>= 5.6) - Microsoft.VisualStudio.Services.Client (16.205.3) - Newtonsoft.Json (>= 12.0.3) - System.IdentityModel.Tokens.Jwt (>= 5.6) - Microsoft.VisualStudio.Settings.15.0 (16.10.31321.278) - Microsoft.VisualStudio.RegDetour (>= 16.10.31320.204) - Microsoft.VisualStudio.Shell.15.0 (>= 16.10.31321.278) - Microsoft.VisualStudio.Setup.Configuration.Interop (3.14.2075) - Microsoft.VisualStudio.Shell.15.0 (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.Build.Framework (>= 17.14.7) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.ComponentModelHost (>= 17.14.106) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.GraphModel (>= 17.14.40260) - Microsoft.VisualStudio.ImageCatalog (>= 17.14.40260) - Microsoft.VisualStudio.Imaging (>= 17.14.40264) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - Microsoft.VisualStudio.ProjectAggregator (>= 17.14.40254) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.SDK.Analyzers (>= 17.7.79) - Microsoft.VisualStudio.Shell.Framework (>= 17.14.40264) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities (>= 17.14.40264) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Shell.Framework (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.Build.Framework (>= 17.14.7) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.GraphModel (>= 17.14.40260) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.SDK.Analyzers (>= 17.7.79) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities (>= 17.14.40264) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Telemetry (17.14.18) - Microsoft.CSharp (>= 4.7) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Newtonsoft.Json (>= 13.0.3) - System.Memory (>= 4.5.4) - System.Runtime.CompilerServices.Unsafe (>= 5.0) - Microsoft.VisualStudio.Threading (17.14.15) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - System.Memory (>= 4.6) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Threading.Tasks.Extensions (>= 4.6) - Microsoft.VisualStudio.Threading.Analyzers (17.14.15) - Microsoft.VisualStudio.Threading.Only (17.14.15) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - System.Memory (>= 4.6) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Threading.Tasks.Extensions (>= 4.6) - Microsoft.VisualStudio.Utilities (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Utilities.Internal (16.3.90) - Microsoft.VisualStudio.Validation (17.13.22) - Microsoft.Win32.Registry (5.0) - System.Security.AccessControl (>= 5.0) - System.Security.Principal.Windows (>= 5.0) - Nerdbank.MessagePack (1.1.62) - Microsoft.Bcl.HashCode (>= 6.0) - Microsoft.NET.StringTools (>= 18.4) - Microsoft.VisualStudio.Validation (>= 17.13.22) - PolyType (>= 1.3.1) - System.Collections.Immutable (>= 8.0) - System.IO.Pipelines (>= 8.0) - System.Text.Json (>= 8.0.6) - Nerdbank.Streams (2.13.16) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.VisualStudio.Threading.Only (>= 17.13.61) - Microsoft.VisualStudio.Validation (>= 17.8.8) - System.IO.Pipelines (>= 8.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - Newtonsoft.Json (13.0.4) - Newtonsoft.Json.Bson (1.0.3) - Newtonsoft.Json (>= 13.0.1) - PolyType (1.3.1) - System.Memory (>= 4.5.5) - System.Reflection.Emit.Lightweight (>= 4.7) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Threading.Tasks.Extensions (>= 4.5.4) - StreamJsonRpc (2.24.84) - MessagePack (>= 2.5.198) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Validation (>= 17.13.22) - Nerdbank.MessagePack (>= 1.0.2) - Nerdbank.Streams (>= 2.13.16) - Newtonsoft.Json (>= 13.0.3) - System.Collections.Immutable (>= 8.0) - System.Diagnostics.DiagnosticSource (>= 8.0.1) - System.IO.Pipelines (>= 8.0) - System.Text.Json (>= 8.0.6) - System.Threading.Tasks.Dataflow (>= 8.0.1) - System.Buffers (4.6.1) - System.Collections.Immutable (10.0.7) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.ComponentModel.Composition (10.0.7) - System.Composition (10.0.7) - System.Composition.AttributedModel (>= 10.0.7) - System.Composition.Convention (>= 10.0.7) - System.Composition.Hosting (>= 10.0.7) - System.Composition.Runtime (>= 10.0.7) - System.Composition.TypedParts (>= 10.0.7) - System.Composition.AttributedModel (10.0.7) - System.Composition.Convention (10.0.7) - System.Composition.AttributedModel (>= 10.0.7) - System.Composition.Hosting (10.0.7) - System.Composition.Runtime (>= 10.0.7) - System.Composition.Runtime (10.0.7) - System.Composition.TypedParts (10.0.7) - System.Composition.AttributedModel (>= 10.0.7) - System.Composition.Hosting (>= 10.0.7) - System.Composition.Runtime (>= 10.0.7) - System.Diagnostics.DiagnosticSource (10.0.7) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.IdentityModel.Tokens.Jwt (8.17) - Microsoft.IdentityModel.JsonWebTokens (>= 8.17) - Microsoft.IdentityModel.Tokens (>= 8.17) - System.IO (4.3) - System.IO.Pipelines (10.0.7) - System.Buffers (>= 4.6.1) - System.Memory (>= 4.6.3) - System.Threading.Tasks.Extensions (>= 4.6.3) - System.Memory (4.6.3) - System.Buffers (>= 4.6.1) - System.Numerics.Vectors (>= 4.6.1) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Net.Http (4.3.4) - System.Security.Cryptography.X509Certificates (>= 4.3) - System.Numerics.Vectors (4.6.1) - System.Private.Uri (4.3.2) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) - System.Reflection.Emit.Lightweight (4.7) - System.Reflection.Metadata (10.0.7) - System.Collections.Immutable (>= 10.0.7) - System.Runtime (4.3.1) - System.Runtime.CompilerServices.Unsafe (6.1.2) - System.Security.AccessControl (6.0.1) - System.Security.Principal.Windows (>= 5.0) - System.Security.Cryptography.Algorithms (4.3.1) - System.IO (>= 4.3) - System.Runtime (>= 4.3) - System.Security.Cryptography.Encoding (>= 4.3) - System.Security.Cryptography.Primitives (>= 4.3) - System.Security.Cryptography.Encoding (4.3) - System.Security.Cryptography.Primitives (4.3) - System.Security.Cryptography.X509Certificates (4.3.2) - System.Security.Cryptography.Algorithms (>= 4.3) - System.Security.Cryptography.Encoding (>= 4.3) - System.Security.Principal.Windows (5.0) - System.Text.Encodings.Web (10.0.7) - System.Buffers (>= 4.6.1) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Text.Json (10.0.7) - Microsoft.Bcl.AsyncInterfaces (>= 10.0.7) - System.Buffers (>= 4.6.1) - System.IO.Pipelines (>= 10.0.7) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Text.Encodings.Web (>= 10.0.7) - System.Threading.Tasks.Extensions (>= 4.6.3) - System.ValueTuple (>= 4.6.2) - System.Threading.AccessControl (10.0.7) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Threading.Tasks.Dataflow (10.0.7) - System.Threading.Tasks.Extensions (4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.ValueTuple (4.6.2) - -GROUP VS2022 -RESTRICTION: == net48 -NUGET - remote: https://api.nuget.org/v3/index.json - MessagePack (3.1.4) - MessagePack.Annotations (>= 3.1.4) - MessagePackAnalyzer (>= 3.1.4) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.NET.StringTools (>= 17.11.4) - System.Collections.Immutable (>= 8.0) - System.Memory (>= 4.5.5) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Threading.Tasks.Extensions (>= 4.5.4) - MessagePack.Annotations (3.1.4) - MessagePackAnalyzer (3.1.4) - Microsoft.AspNet.WebApi.Client (6.0) - Newtonsoft.Json (>= 13.0.1) - Newtonsoft.Json.Bson (>= 1.0.2) - System.Memory (>= 4.5.5) - System.Threading.Tasks.Extensions (>= 4.5.4) - Microsoft.AspNet.WebApi.Core (5.3) - Microsoft.AspNet.WebApi.Client (>= 6.0) - Microsoft.AspNet.WebApi.WebHost (5.3) - Microsoft.AspNet.WebApi.Core (>= 5.3) - Microsoft.Bcl.AsyncInterfaces (10.0.7) - System.Threading.Tasks.Extensions (>= 4.6.3) - Microsoft.Bcl.HashCode (6.0) - Microsoft.Bcl.TimeProvider (10.0.7) - Microsoft.Bcl.AsyncInterfaces (>= 10.0.7) - System.ValueTuple (>= 4.6.2) - Microsoft.Build.Framework (18.4) - System.Collections.Immutable (>= 10.0.1) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Text.Json (>= 10.0.1) - System.Threading.Tasks.Extensions (>= 4.6.3) - System.ValueTuple (>= 4.6.1) - Microsoft.CSharp (4.7) - Microsoft.Extensions.DependencyInjection.Abstractions (10.0.7) - Microsoft.Bcl.AsyncInterfaces (>= 10.0.7) - System.Threading.Tasks.Extensions (>= 4.6.3) - Microsoft.Extensions.Logging.Abstractions (10.0.7) - Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7) - System.Buffers (>= 4.6.1) - System.Diagnostics.DiagnosticSource (>= 10.0.7) - System.Memory (>= 4.6.3) - Microsoft.Identity.Client (4.83.3) - Microsoft.IdentityModel.Abstractions (>= 8.14) - System.Diagnostics.DiagnosticSource (>= 6.0.1) - System.Formats.Asn1 (>= 8.0.1) - System.ValueTuple (>= 4.5) - Microsoft.Identity.Client.Extensions.Msal (4.83.3) - Microsoft.Identity.Client (>= 4.83.3) - System.IO.FileSystem.AccessControl (>= 5.0) - System.Security.Cryptography.ProtectedData (>= 4.5) - Microsoft.IdentityModel.Abstractions (8.17) - Microsoft.IdentityModel.JsonWebTokens (8.17) - Microsoft.Bcl.TimeProvider (>= 8.0.1) - Microsoft.IdentityModel.Tokens (>= 8.17) - Microsoft.IdentityModel.Logging (8.17) - Microsoft.IdentityModel.Abstractions (>= 8.17) - Microsoft.IdentityModel.Tokens (8.17) - Microsoft.Bcl.TimeProvider (>= 8.0.1) - Microsoft.Extensions.Logging.Abstractions (>= 2.1) - Microsoft.IdentityModel.Logging (>= 8.17) - System.Diagnostics.DiagnosticSource (>= 6.0.2) - System.Memory (>= 4.5.5) - System.Text.Json (>= 8.0.5) - Microsoft.IO.Redist (6.1.3) - System.Buffers (>= 4.6.1) - System.Memory (>= 4.6.3) - Microsoft.NET.StringTools (18.4) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - Microsoft.ServiceHub.Analyzers (4.8.55) - Microsoft.ServiceHub.Framework (4.8.55) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.VisualStudio.Composition (>= 17.12.20) - Microsoft.VisualStudio.Threading (>= 17.13.2) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Nerdbank.Streams (>= 2.11.86) - StreamJsonRpc (>= 2.21.10) - System.Collections.Immutable (>= 8.0) - System.Text.Json (>= 8.0.5) - Microsoft.ServiceHub.Resources (4.6.2052) - Microsoft.TeamFoundation.DistributedTask.Common.Contracts (19.225.2) - Microsoft.VisualStudio.Services.Client (19.225.2) - Microsoft.TeamFoundationServer.Client (19.225.2) - Microsoft.AspNet.WebApi.Client (>= 5.2.7) - Microsoft.AspNet.WebApi.Core (>= 5.2.7) - Microsoft.AspNet.WebApi.WebHost (>= 5.2.7) - Microsoft.TeamFoundation.DistributedTask.Common.Contracts (19.225.2) - Microsoft.VisualStudio.Services.Client (19.225.2) - Newtonsoft.Json (>= 13.0.2) - Microsoft.TeamFoundationServer.ExtendedClient (19.225.2) - Microsoft.AspNet.WebApi.Client (>= 5.2.7) - Microsoft.AspNet.WebApi.Core (>= 5.2.7) - Microsoft.TeamFoundationServer.Client (19.225.2) - Microsoft.VisualStudio.Services.Client (19.225.2) - Microsoft.VisualStudio.Services.InteractiveClient (19.225.2) - Newtonsoft.Json (>= 13.0.2) - System.IdentityModel.Tokens.Jwt (>= 6.30.1) - Microsoft.VisualStudio.ComponentModelHost (17.14.106) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.VisualStudio.Composition (>= 17.12.20) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.13.39273) - Microsoft.VisualStudio.Interop (>= 17.13.39276) - Microsoft.VisualStudio.Validation (>= 17.8.8) - System.Collections.Immutable (>= 8.0) - System.ComponentModel.Composition (>= 8.0) - System.Memory (>= 4.5.5) - System.Reflection.Metadata (>= 8.0) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Threading.Tasks.Extensions (>= 4.5.4) - Microsoft.VisualStudio.Composition (17.13.41) - MessagePack (>= 2.5.192) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.Validation (>= 17.8.8) - System.Collections.Immutable (>= 8.0) - System.ComponentModel.Composition (>= 8.0) - System.Composition (>= 8.0) - System.Composition.AttributedModel (>= 8.0) - System.Reflection.Metadata (>= 8.0) - System.Threading.Tasks.Dataflow (>= 8.0.1) - Microsoft.VisualStudio.Composition.Analyzers (17.13.41) - Microsoft.VisualStudio.GraphModel (17.14.40260) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - System.ComponentModel.Composition (>= 9.0) - Microsoft.VisualStudio.ImageCatalog (17.14.40260) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - Microsoft.VisualStudio.Imaging (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities (>= 17.14.40264) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (17.14.40254) - Microsoft.VisualStudio.Interop (17.14.40260) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.ProjectAggregator (17.14.40254) - Microsoft.VisualStudio.RegDetour (17.10.34916.79) - Microsoft.VisualStudio.RemoteControl (16.3.52) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.42) - Microsoft.VisualStudio.RpcContracts (17.14.20) - Microsoft.ServiceHub.Framework (>= 4.8.40) - System.Text.Json (>= 8.0.5) - System.Threading.Tasks.Dataflow (>= 8.0.1) - Microsoft.VisualStudio.SDK.Analyzers (17.7.113) - Microsoft.VisualStudio.Services.Client (19.225.2) - Microsoft.AspNet.WebApi.Client (>= 5.2.7) - Microsoft.IdentityModel.Tokens (>= 6.30.1) - Newtonsoft.Json (>= 13.0.2) - System.IdentityModel.Tokens.Jwt (>= 6.30.1) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Services.InteractiveClient (19.225.2) - Microsoft.Identity.Client (>= 4.54.1) - Microsoft.Identity.Client.Extensions.Msal (>= 2.23) - Microsoft.IdentityModel.Tokens (>= 6.30.1) - Microsoft.VisualStudio.Services.Client (19.225.2) - Newtonsoft.Json (>= 13.0.2) - System.IdentityModel.Tokens.Jwt (>= 6.30.1) - Microsoft.VisualStudio.Settings.15.0 (17.10.34916.79) - Microsoft.VisualStudio.RegDetour (>= 17.10.34916.79) - Microsoft.VisualStudio.Shell.15.0 (>= 17.10.34916.79) - Microsoft.VisualStudio.Setup.Configuration.Interop (3.14.2075) - Microsoft.VisualStudio.Shell.15.0 (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.Build.Framework (>= 17.14.7) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.ComponentModelHost (>= 17.14.106) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.GraphModel (>= 17.14.40260) - Microsoft.VisualStudio.ImageCatalog (>= 17.14.40260) - Microsoft.VisualStudio.Imaging (>= 17.14.40264) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - Microsoft.VisualStudio.ProjectAggregator (>= 17.14.40254) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.SDK.Analyzers (>= 17.7.79) - Microsoft.VisualStudio.Shell.Framework (>= 17.14.40264) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities (>= 17.14.40264) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Shell.Framework (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.Build.Framework (>= 17.14.7) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Analyzers (>= 4.8.55) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.GraphModel (>= 17.14.40260) - Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime (>= 17.14.40254) - Microsoft.VisualStudio.Interop (>= 17.14.40260) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.SDK.Analyzers (>= 17.7.79) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities (>= 17.14.40264) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Telemetry (17.14.18) - Microsoft.CSharp (>= 4.7) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Newtonsoft.Json (>= 13.0.3) - System.Memory (>= 4.5.4) - System.Runtime.CompilerServices.Unsafe (>= 5.0) - Microsoft.VisualStudio.Threading (17.14.15) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - System.Memory (>= 4.6) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Threading.Tasks.Extensions (>= 4.6) - Microsoft.VisualStudio.Threading.Analyzers (17.14.15) - Microsoft.VisualStudio.Threading.Only (17.14.15) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - System.Memory (>= 4.6) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Threading.Tasks.Extensions (>= 4.6) - Microsoft.VisualStudio.Utilities (17.14.40264) - MessagePack (>= 2.5.192) - MessagePack.Annotations (>= 2.5.192) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.IO.Redist (>= 6.1) - Microsoft.NET.StringTools (>= 17.14.7) - Microsoft.ServiceHub.Framework (>= 4.8.55) - Microsoft.ServiceHub.Resources (>= 4.6.2052) - Microsoft.VisualStudio.Composition (>= 17.13.41) - Microsoft.VisualStudio.Composition.Analyzers (>= 17.13.41) - Microsoft.VisualStudio.RemoteControl (>= 16.3.52) - Microsoft.VisualStudio.RpcContracts (>= 17.14.20) - Microsoft.VisualStudio.Telemetry (>= 17.14.18) - Microsoft.VisualStudio.Threading (>= 17.14.15) - Microsoft.VisualStudio.Threading.Analyzers (>= 17.14.15) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Utilities.Internal (>= 16.3.90) - Microsoft.VisualStudio.Validation (>= 17.8.8) - Microsoft.Win32.Registry (>= 5.0) - Nerdbank.Streams (>= 2.12.87) - Newtonsoft.Json (>= 13.0.3) - StreamJsonRpc (>= 2.22.11) - System.Buffers (>= 4.6) - System.Collections.Immutable (>= 9.0) - System.ComponentModel.Composition (>= 9.0) - System.Composition (>= 9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Diagnostics.DiagnosticSource (>= 9.0) - System.IO.Pipelines (>= 9.0) - System.Memory (>= 4.6) - System.Numerics.Vectors (>= 4.6) - System.Reflection.Metadata (>= 9.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Text.Encodings.Web (>= 9.0) - System.Text.Json (>= 9.0) - System.Threading.AccessControl (>= 9.0) - System.Threading.Tasks.Dataflow (>= 9.0) - System.Threading.Tasks.Extensions (>= 4.6) - System.ValueTuple (>= 4.5) - Microsoft.VisualStudio.Utilities.Internal (16.3.90) - Microsoft.VisualStudio.Validation (17.13.22) - Microsoft.Win32.Registry (5.0) - System.Security.AccessControl (>= 5.0) - System.Security.Principal.Windows (>= 5.0) - Nerdbank.MessagePack (1.1.62) - Microsoft.Bcl.HashCode (>= 6.0) - Microsoft.NET.StringTools (>= 18.4) - Microsoft.VisualStudio.Validation (>= 17.13.22) - PolyType (>= 1.3.1) - System.Collections.Immutable (>= 8.0) - System.IO.Pipelines (>= 8.0) - System.Text.Json (>= 8.0.6) - Nerdbank.Streams (2.13.16) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.VisualStudio.Threading.Only (>= 17.13.61) - Microsoft.VisualStudio.Validation (>= 17.8.8) - System.IO.Pipelines (>= 8.0) - System.Runtime.CompilerServices.Unsafe (>= 6.1) - Newtonsoft.Json (13.0.4) - Newtonsoft.Json.Bson (1.0.3) - Newtonsoft.Json (>= 13.0.1) - PolyType (1.3.1) - System.Memory (>= 4.5.5) - System.Reflection.Emit.Lightweight (>= 4.7) - System.Runtime.CompilerServices.Unsafe (>= 6.0) - System.Threading.Tasks.Extensions (>= 4.5.4) - StreamJsonRpc (2.24.84) - MessagePack (>= 2.5.198) - Microsoft.Bcl.AsyncInterfaces (>= 9.0) - Microsoft.VisualStudio.Threading.Only (>= 17.14.15) - Microsoft.VisualStudio.Validation (>= 17.13.22) - Nerdbank.MessagePack (>= 1.0.2) - Nerdbank.Streams (>= 2.13.16) - Newtonsoft.Json (>= 13.0.3) - System.Collections.Immutable (>= 8.0) - System.Diagnostics.DiagnosticSource (>= 8.0.1) - System.IO.Pipelines (>= 8.0) - System.Text.Json (>= 8.0.6) - System.Threading.Tasks.Dataflow (>= 8.0.1) - System.Buffers (4.6.1) - System.Collections.Immutable (10.0.7) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.ComponentModel.Composition (10.0.7) - System.Composition (10.0.7) - System.Composition.AttributedModel (>= 10.0.7) - System.Composition.Convention (>= 10.0.7) - System.Composition.Hosting (>= 10.0.7) - System.Composition.Runtime (>= 10.0.7) - System.Composition.TypedParts (>= 10.0.7) - System.Composition.AttributedModel (10.0.7) - System.Composition.Convention (10.0.7) - System.Composition.AttributedModel (>= 10.0.7) - System.Composition.Hosting (10.0.7) - System.Composition.Runtime (>= 10.0.7) - System.Composition.Runtime (10.0.7) - System.Composition.TypedParts (10.0.7) - System.Composition.AttributedModel (>= 10.0.7) - System.Composition.Hosting (>= 10.0.7) - System.Composition.Runtime (>= 10.0.7) - System.Diagnostics.DiagnosticSource (10.0.7) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Formats.Asn1 (10.0.7) - System.Memory (>= 4.6.3) - System.ValueTuple (>= 4.6.2) - System.IdentityModel.Tokens.Jwt (8.17) - Microsoft.IdentityModel.JsonWebTokens (>= 8.17) - Microsoft.IdentityModel.Tokens (>= 8.17) - System.IO.FileSystem.AccessControl (5.0) - System.Security.AccessControl (>= 5.0) - System.Security.Principal.Windows (>= 5.0) - System.IO.Pipelines (10.0.7) - System.Buffers (>= 4.6.1) - System.Memory (>= 4.6.3) - System.Threading.Tasks.Extensions (>= 4.6.3) - System.Memory (4.6.3) - System.Buffers (>= 4.6.1) - System.Numerics.Vectors (>= 4.6.1) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Numerics.Vectors (4.6.1) - System.Reflection.Emit.Lightweight (4.7) - System.Reflection.Metadata (10.0.7) - System.Collections.Immutable (>= 10.0.7) - System.Runtime.CompilerServices.Unsafe (6.1.2) - System.Security.AccessControl (6.0.1) - System.Security.Principal.Windows (>= 5.0) - System.Security.Cryptography.ProtectedData (10.0.7) - System.Security.Principal.Windows (5.0) - System.Text.Encodings.Web (10.0.7) - System.Buffers (>= 4.6.1) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Text.Json (10.0.7) - Microsoft.Bcl.AsyncInterfaces (>= 10.0.7) - System.Buffers (>= 4.6.1) - System.IO.Pipelines (>= 10.0.7) - System.Memory (>= 4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.Text.Encodings.Web (>= 10.0.7) - System.Threading.Tasks.Extensions (>= 4.6.3) - System.ValueTuple (>= 4.6.2) - System.Threading.AccessControl (10.0.7) - System.Security.AccessControl (>= 6.0) - System.Security.Principal.Windows (>= 5.0) - System.Threading.Tasks.Dataflow (10.0.7) - System.Threading.Tasks.Extensions (4.6.3) - System.Runtime.CompilerServices.Unsafe (>= 6.1.2) - System.ValueTuple (4.6.2) From 2dfae1a7d1d4cf30c22223f6a3d0219e7b97afc9 Mon Sep 17 00:00:00 2001 From: Arthur Moore Date: Tue, 5 May 2026 13:54:03 -0400 Subject: [PATCH 6/7] Split the core library to a separate project --- .../Commands/CheckinOptions.cs | 0 .../Commands/Helpers.cs | 0 .../Commands/RemoteOptions.cs | 0 .../Commands/ShelveList.cs | 0 .../ConfigProperties.cs | 0 .../Core/Bootstrapper.cs | 3 +- .../BranchTreeContainsPathVisitor.cs | 0 .../Core/Changes/Git/Add.cs | 0 .../Core/Changes/Git/Delete.cs | 0 .../Core/Changes/Git/Modify.cs | 0 .../Core/Changes/Git/RenameEdit.cs | 0 .../Core/CheckinPolicyEvaluator.cs | 0 .../Core/DelimitedReader.cs | 0 .../Core/DerivedGitTfsRemote.cs | 0 .../Core/DirectoryTidier.cs | 0 .../Core/ExportWorkItem.cs | 0 src/{GitTfs => GitTfs.Core}/Core/Ext.cs | 0 .../Core/GitChangeInfo.cs | 0 .../Core/GitCommandException.cs | 0 src/{GitTfs => GitTfs.Core}/Core/GitCommit.cs | 0 .../Core/GitHelpers.cs | 0 src/{GitTfs => GitTfs.Core}/Core/GitObject.cs | 0 .../Core/GitRepository.cs | 0 .../Core/GitTfsException.cs | 0 .../Core/GitTfsGatedCheckinException.cs | 0 .../Core/GitTfsRemote.cs | 0 .../Core/GitTfsVersionProvider.cs | 0 .../Core/GitTreeBuilder.cs | 0 .../Core/GitTreeEntry.cs | 0 .../Core/IBranchTreeVisitor.cs | 0 .../Core/IGitChangedFile.cs | 0 .../Core/IGitHelpers.cs | 0 .../Core/IGitRepository.cs | 0 .../Core/IGitTfsRemote.cs | 0 .../Core/IGitTfsVersionProvider.cs | 0 .../Core/IGitTreeBuilder.cs | 0 .../Core/ITfsChangeset.cs | 0 .../Core/ITfsCheckinNote.cs | 0 .../Core/ITfsWorkitem.cs | 0 .../Core/ITfsWorkspace.cs | 0 .../Core/ITreeEntry.cs | 0 src/{GitTfs => GitTfs.Core}/Core/Janitor.cs | 0 src/{GitTfs => GitTfs.Core}/Core/LogEntry.cs | 0 src/{GitTfs => GitTfs.Core}/Core/Mode.cs | 0 .../Core/RemoteConfigConverter.cs | 0 .../Core/RemoteInfo.cs | 0 .../RequiresValidGitRepositoryAttribute.cs | 0 .../Core/TfsChangeset.cs | 0 .../Core/TfsChangesetInfo.cs | 0 .../Core/TfsCheckinNote.cs | 0 .../Core/TfsInterop/IBranch.cs | 0 .../Core/TfsInterop/IChange.cs | 0 .../Core/TfsInterop/IChangeset.cs | 0 .../TfsInterop/ICheckinEvaluationResult.cs | 0 .../Core/TfsInterop/ICheckinNote.cs | 0 .../Core/TfsInterop/IIdentity.cs | 0 .../Core/TfsInterop/IItem.cs | 0 .../Core/TfsInterop/IPendingChange.cs | 0 .../Core/TfsInterop/IShelveset.cs | 0 .../Core/TfsInterop/ITfsHelper.cs | 0 .../Core/TfsInterop/IVersionControlServer.cs | 0 .../Core/TfsInterop/IWorkItemCheckedInfo.cs | 0 .../Core/TfsInterop/IWorkItemCheckinInfo.cs | 0 .../Core/TfsInterop/IWorkspace.cs | 0 .../Core/TfsInterop/NullIdentity.cs | 0 .../Core/TfsInterop/README.txt | 0 .../Core/TfsInterop/RootBranch.cs | 0 .../Core/TfsInterop/TfsApiBridge.cs | 0 .../Core/TfsInterop/TfsChangeType.cs | 0 .../TfsInterop/TfsCheckinEvaluationOptions.cs | 0 .../Core/TfsInterop/TfsExt.cs | 0 .../Core/TfsInterop/TfsItemType.cs | 0 .../Core/TfsInterop/TfsPlugin.cs | 0 .../Core/TfsInterop/TfsRecursionType.cs | 0 .../Core/TfsInterop/TfsShelvingOptions.cs | 0 .../TfsInterop/TfsWorkItemCheckinAction.cs | 0 .../Core/TfsInterop/WrapperFor.cs | 0 src/{GitTfs => GitTfs.Core}/Core/TfsLabel.cs | 0 .../Core/TfsTreeEntry.cs | 0 .../Core/TfsWorkitem.cs | 0 .../Core/TfsWorkspace.cs | 0 src/{GitTfs => GitTfs.Core}/Core/TfsWriter.cs | 0 src/GitTfs.Core/GitTfs.Core.csproj | 16 ++++ src/{GitTfs => GitTfs.Core}/GitTfsCommand.cs | 0 .../GitTfsConstants.cs | 0 .../GitTfsExitCodes.cs | 0 src/{GitTfs => GitTfs.Core}/Globals.cs | 0 .../Util/AuthorsFile.cs | 0 src/{GitTfs => GitTfs.Core}/Util/Bouncer.cs | 0 .../CamelCaseToDelimitedStringConverter.cs | 0 .../Util/ChangeSieve.cs | 0 .../Util/ConfigPropertyLoader.cs | 0 .../Util/ConfiguresStructureMap.cs | 0 .../Util/ExportMetadatasInitializer.cs | 0 .../Util/InspectExtensions.cs | 4 +- .../Util/PathResolver.cs | 0 src/GitTfs.Core/Util/StringExtensions.cs | 76 +++++++++++++++++++ .../Util/StructureMapSingletonAttribute.cs | 0 .../Util/TemporaryFile.cs | 0 .../Util/TemporaryFileStream.cs | 0 .../Util/WhenDynamicDoesntWork.cs | 0 src/GitTfs.Core/paket.references | 3 + src/GitTfs.Vs2019/GitTfs.Vs2019.csproj | 2 +- src/GitTfs.Vs2022/GitTfs.Vs2022.csproj | 6 +- src/GitTfs.VsCommon/TfsHelper.Common.cs | 3 +- src/GitTfs.VsFake/GitTfs.VsFake.csproj | 2 +- src/GitTfs.slnx | 1 + src/GitTfs/Commands/Branch.cs | 2 +- src/GitTfs/Commands/Checkout.cs | 4 +- src/GitTfs/Commands/Init.cs | 69 ----------------- src/GitTfs/GitTfs.csproj | 3 +- src/GitTfsTest/Commands/ExtTest.cs | 2 +- src/GitTfsTest/GitTfsTest.csproj | 2 +- 113 files changed, 112 insertions(+), 86 deletions(-) rename src/{GitTfs => GitTfs.Core}/Commands/CheckinOptions.cs (100%) rename src/{GitTfs => GitTfs.Core}/Commands/Helpers.cs (100%) rename src/{GitTfs => GitTfs.Core}/Commands/RemoteOptions.cs (100%) rename src/{GitTfs => GitTfs.Core}/Commands/ShelveList.cs (100%) rename src/{GitTfs => GitTfs.Core}/ConfigProperties.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Bootstrapper.cs (97%) rename src/{GitTfs => GitTfs.Core}/Core/BranchVisitors/BranchTreeContainsPathVisitor.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Changes/Git/Add.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Changes/Git/Delete.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Changes/Git/Modify.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Changes/Git/RenameEdit.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/CheckinPolicyEvaluator.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/DelimitedReader.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/DerivedGitTfsRemote.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/DirectoryTidier.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/ExportWorkItem.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Ext.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitChangeInfo.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitCommandException.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitCommit.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitHelpers.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitObject.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitRepository.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitTfsException.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitTfsGatedCheckinException.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitTfsRemote.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitTfsVersionProvider.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitTreeBuilder.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/GitTreeEntry.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IBranchTreeVisitor.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IGitChangedFile.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IGitHelpers.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IGitRepository.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IGitTfsRemote.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IGitTfsVersionProvider.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/IGitTreeBuilder.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/ITfsChangeset.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/ITfsCheckinNote.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/ITfsWorkitem.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/ITfsWorkspace.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/ITreeEntry.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Janitor.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/LogEntry.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/Mode.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/RemoteConfigConverter.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/RemoteInfo.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/RequiresValidGitRepositoryAttribute.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsChangeset.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsChangesetInfo.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsCheckinNote.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IBranch.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IChange.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IChangeset.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/ICheckinEvaluationResult.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/ICheckinNote.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IIdentity.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IItem.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IPendingChange.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IShelveset.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/ITfsHelper.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IVersionControlServer.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IWorkItemCheckedInfo.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IWorkItemCheckinInfo.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/IWorkspace.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/NullIdentity.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/README.txt (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/RootBranch.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsApiBridge.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsChangeType.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsCheckinEvaluationOptions.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsExt.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsItemType.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsPlugin.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsRecursionType.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsShelvingOptions.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/TfsWorkItemCheckinAction.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsInterop/WrapperFor.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsLabel.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsTreeEntry.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsWorkitem.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsWorkspace.cs (100%) rename src/{GitTfs => GitTfs.Core}/Core/TfsWriter.cs (100%) create mode 100644 src/GitTfs.Core/GitTfs.Core.csproj rename src/{GitTfs => GitTfs.Core}/GitTfsCommand.cs (100%) rename src/{GitTfs => GitTfs.Core}/GitTfsConstants.cs (100%) rename src/{GitTfs => GitTfs.Core}/GitTfsExitCodes.cs (100%) rename src/{GitTfs => GitTfs.Core}/Globals.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/AuthorsFile.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/Bouncer.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/CamelCaseToDelimitedStringConverter.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/ChangeSieve.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/ConfigPropertyLoader.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/ConfiguresStructureMap.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/ExportMetadatasInitializer.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/InspectExtensions.cs (98%) rename src/{GitTfs => GitTfs.Core}/Util/PathResolver.cs (100%) create mode 100644 src/GitTfs.Core/Util/StringExtensions.cs rename src/{GitTfs => GitTfs.Core}/Util/StructureMapSingletonAttribute.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/TemporaryFile.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/TemporaryFileStream.cs (100%) rename src/{GitTfs => GitTfs.Core}/Util/WhenDynamicDoesntWork.cs (100%) create mode 100644 src/GitTfs.Core/paket.references diff --git a/src/GitTfs/Commands/CheckinOptions.cs b/src/GitTfs.Core/Commands/CheckinOptions.cs similarity index 100% rename from src/GitTfs/Commands/CheckinOptions.cs rename to src/GitTfs.Core/Commands/CheckinOptions.cs diff --git a/src/GitTfs/Commands/Helpers.cs b/src/GitTfs.Core/Commands/Helpers.cs similarity index 100% rename from src/GitTfs/Commands/Helpers.cs rename to src/GitTfs.Core/Commands/Helpers.cs diff --git a/src/GitTfs/Commands/RemoteOptions.cs b/src/GitTfs.Core/Commands/RemoteOptions.cs similarity index 100% rename from src/GitTfs/Commands/RemoteOptions.cs rename to src/GitTfs.Core/Commands/RemoteOptions.cs diff --git a/src/GitTfs/Commands/ShelveList.cs b/src/GitTfs.Core/Commands/ShelveList.cs similarity index 100% rename from src/GitTfs/Commands/ShelveList.cs rename to src/GitTfs.Core/Commands/ShelveList.cs diff --git a/src/GitTfs/ConfigProperties.cs b/src/GitTfs.Core/ConfigProperties.cs similarity index 100% rename from src/GitTfs/ConfigProperties.cs rename to src/GitTfs.Core/ConfigProperties.cs diff --git a/src/GitTfs/Core/Bootstrapper.cs b/src/GitTfs.Core/Core/Bootstrapper.cs similarity index 97% rename from src/GitTfs/Core/Bootstrapper.cs rename to src/GitTfs.Core/Core/Bootstrapper.cs index f329d3985..9e872f2a2 100644 --- a/src/GitTfs/Core/Bootstrapper.cs +++ b/src/GitTfs.Core/Core/Bootstrapper.cs @@ -1,4 +1,5 @@ -using GitTfs.Commands; // ToGitRefName() and RemoteOptions +using GitTfs.Commands; // RemoteOptions +using GitTfs.Util; // ToGitRefName() using System.Diagnostics; namespace GitTfs.Core diff --git a/src/GitTfs/Core/BranchVisitors/BranchTreeContainsPathVisitor.cs b/src/GitTfs.Core/Core/BranchVisitors/BranchTreeContainsPathVisitor.cs similarity index 100% rename from src/GitTfs/Core/BranchVisitors/BranchTreeContainsPathVisitor.cs rename to src/GitTfs.Core/Core/BranchVisitors/BranchTreeContainsPathVisitor.cs diff --git a/src/GitTfs/Core/Changes/Git/Add.cs b/src/GitTfs.Core/Core/Changes/Git/Add.cs similarity index 100% rename from src/GitTfs/Core/Changes/Git/Add.cs rename to src/GitTfs.Core/Core/Changes/Git/Add.cs diff --git a/src/GitTfs/Core/Changes/Git/Delete.cs b/src/GitTfs.Core/Core/Changes/Git/Delete.cs similarity index 100% rename from src/GitTfs/Core/Changes/Git/Delete.cs rename to src/GitTfs.Core/Core/Changes/Git/Delete.cs diff --git a/src/GitTfs/Core/Changes/Git/Modify.cs b/src/GitTfs.Core/Core/Changes/Git/Modify.cs similarity index 100% rename from src/GitTfs/Core/Changes/Git/Modify.cs rename to src/GitTfs.Core/Core/Changes/Git/Modify.cs diff --git a/src/GitTfs/Core/Changes/Git/RenameEdit.cs b/src/GitTfs.Core/Core/Changes/Git/RenameEdit.cs similarity index 100% rename from src/GitTfs/Core/Changes/Git/RenameEdit.cs rename to src/GitTfs.Core/Core/Changes/Git/RenameEdit.cs diff --git a/src/GitTfs/Core/CheckinPolicyEvaluator.cs b/src/GitTfs.Core/Core/CheckinPolicyEvaluator.cs similarity index 100% rename from src/GitTfs/Core/CheckinPolicyEvaluator.cs rename to src/GitTfs.Core/Core/CheckinPolicyEvaluator.cs diff --git a/src/GitTfs/Core/DelimitedReader.cs b/src/GitTfs.Core/Core/DelimitedReader.cs similarity index 100% rename from src/GitTfs/Core/DelimitedReader.cs rename to src/GitTfs.Core/Core/DelimitedReader.cs diff --git a/src/GitTfs/Core/DerivedGitTfsRemote.cs b/src/GitTfs.Core/Core/DerivedGitTfsRemote.cs similarity index 100% rename from src/GitTfs/Core/DerivedGitTfsRemote.cs rename to src/GitTfs.Core/Core/DerivedGitTfsRemote.cs diff --git a/src/GitTfs/Core/DirectoryTidier.cs b/src/GitTfs.Core/Core/DirectoryTidier.cs similarity index 100% rename from src/GitTfs/Core/DirectoryTidier.cs rename to src/GitTfs.Core/Core/DirectoryTidier.cs diff --git a/src/GitTfs/Core/ExportWorkItem.cs b/src/GitTfs.Core/Core/ExportWorkItem.cs similarity index 100% rename from src/GitTfs/Core/ExportWorkItem.cs rename to src/GitTfs.Core/Core/ExportWorkItem.cs diff --git a/src/GitTfs/Core/Ext.cs b/src/GitTfs.Core/Core/Ext.cs similarity index 100% rename from src/GitTfs/Core/Ext.cs rename to src/GitTfs.Core/Core/Ext.cs diff --git a/src/GitTfs/Core/GitChangeInfo.cs b/src/GitTfs.Core/Core/GitChangeInfo.cs similarity index 100% rename from src/GitTfs/Core/GitChangeInfo.cs rename to src/GitTfs.Core/Core/GitChangeInfo.cs diff --git a/src/GitTfs/Core/GitCommandException.cs b/src/GitTfs.Core/Core/GitCommandException.cs similarity index 100% rename from src/GitTfs/Core/GitCommandException.cs rename to src/GitTfs.Core/Core/GitCommandException.cs diff --git a/src/GitTfs/Core/GitCommit.cs b/src/GitTfs.Core/Core/GitCommit.cs similarity index 100% rename from src/GitTfs/Core/GitCommit.cs rename to src/GitTfs.Core/Core/GitCommit.cs diff --git a/src/GitTfs/Core/GitHelpers.cs b/src/GitTfs.Core/Core/GitHelpers.cs similarity index 100% rename from src/GitTfs/Core/GitHelpers.cs rename to src/GitTfs.Core/Core/GitHelpers.cs diff --git a/src/GitTfs/Core/GitObject.cs b/src/GitTfs.Core/Core/GitObject.cs similarity index 100% rename from src/GitTfs/Core/GitObject.cs rename to src/GitTfs.Core/Core/GitObject.cs diff --git a/src/GitTfs/Core/GitRepository.cs b/src/GitTfs.Core/Core/GitRepository.cs similarity index 100% rename from src/GitTfs/Core/GitRepository.cs rename to src/GitTfs.Core/Core/GitRepository.cs diff --git a/src/GitTfs/Core/GitTfsException.cs b/src/GitTfs.Core/Core/GitTfsException.cs similarity index 100% rename from src/GitTfs/Core/GitTfsException.cs rename to src/GitTfs.Core/Core/GitTfsException.cs diff --git a/src/GitTfs/Core/GitTfsGatedCheckinException.cs b/src/GitTfs.Core/Core/GitTfsGatedCheckinException.cs similarity index 100% rename from src/GitTfs/Core/GitTfsGatedCheckinException.cs rename to src/GitTfs.Core/Core/GitTfsGatedCheckinException.cs diff --git a/src/GitTfs/Core/GitTfsRemote.cs b/src/GitTfs.Core/Core/GitTfsRemote.cs similarity index 100% rename from src/GitTfs/Core/GitTfsRemote.cs rename to src/GitTfs.Core/Core/GitTfsRemote.cs diff --git a/src/GitTfs/Core/GitTfsVersionProvider.cs b/src/GitTfs.Core/Core/GitTfsVersionProvider.cs similarity index 100% rename from src/GitTfs/Core/GitTfsVersionProvider.cs rename to src/GitTfs.Core/Core/GitTfsVersionProvider.cs diff --git a/src/GitTfs/Core/GitTreeBuilder.cs b/src/GitTfs.Core/Core/GitTreeBuilder.cs similarity index 100% rename from src/GitTfs/Core/GitTreeBuilder.cs rename to src/GitTfs.Core/Core/GitTreeBuilder.cs diff --git a/src/GitTfs/Core/GitTreeEntry.cs b/src/GitTfs.Core/Core/GitTreeEntry.cs similarity index 100% rename from src/GitTfs/Core/GitTreeEntry.cs rename to src/GitTfs.Core/Core/GitTreeEntry.cs diff --git a/src/GitTfs/Core/IBranchTreeVisitor.cs b/src/GitTfs.Core/Core/IBranchTreeVisitor.cs similarity index 100% rename from src/GitTfs/Core/IBranchTreeVisitor.cs rename to src/GitTfs.Core/Core/IBranchTreeVisitor.cs diff --git a/src/GitTfs/Core/IGitChangedFile.cs b/src/GitTfs.Core/Core/IGitChangedFile.cs similarity index 100% rename from src/GitTfs/Core/IGitChangedFile.cs rename to src/GitTfs.Core/Core/IGitChangedFile.cs diff --git a/src/GitTfs/Core/IGitHelpers.cs b/src/GitTfs.Core/Core/IGitHelpers.cs similarity index 100% rename from src/GitTfs/Core/IGitHelpers.cs rename to src/GitTfs.Core/Core/IGitHelpers.cs diff --git a/src/GitTfs/Core/IGitRepository.cs b/src/GitTfs.Core/Core/IGitRepository.cs similarity index 100% rename from src/GitTfs/Core/IGitRepository.cs rename to src/GitTfs.Core/Core/IGitRepository.cs diff --git a/src/GitTfs/Core/IGitTfsRemote.cs b/src/GitTfs.Core/Core/IGitTfsRemote.cs similarity index 100% rename from src/GitTfs/Core/IGitTfsRemote.cs rename to src/GitTfs.Core/Core/IGitTfsRemote.cs diff --git a/src/GitTfs/Core/IGitTfsVersionProvider.cs b/src/GitTfs.Core/Core/IGitTfsVersionProvider.cs similarity index 100% rename from src/GitTfs/Core/IGitTfsVersionProvider.cs rename to src/GitTfs.Core/Core/IGitTfsVersionProvider.cs diff --git a/src/GitTfs/Core/IGitTreeBuilder.cs b/src/GitTfs.Core/Core/IGitTreeBuilder.cs similarity index 100% rename from src/GitTfs/Core/IGitTreeBuilder.cs rename to src/GitTfs.Core/Core/IGitTreeBuilder.cs diff --git a/src/GitTfs/Core/ITfsChangeset.cs b/src/GitTfs.Core/Core/ITfsChangeset.cs similarity index 100% rename from src/GitTfs/Core/ITfsChangeset.cs rename to src/GitTfs.Core/Core/ITfsChangeset.cs diff --git a/src/GitTfs/Core/ITfsCheckinNote.cs b/src/GitTfs.Core/Core/ITfsCheckinNote.cs similarity index 100% rename from src/GitTfs/Core/ITfsCheckinNote.cs rename to src/GitTfs.Core/Core/ITfsCheckinNote.cs diff --git a/src/GitTfs/Core/ITfsWorkitem.cs b/src/GitTfs.Core/Core/ITfsWorkitem.cs similarity index 100% rename from src/GitTfs/Core/ITfsWorkitem.cs rename to src/GitTfs.Core/Core/ITfsWorkitem.cs diff --git a/src/GitTfs/Core/ITfsWorkspace.cs b/src/GitTfs.Core/Core/ITfsWorkspace.cs similarity index 100% rename from src/GitTfs/Core/ITfsWorkspace.cs rename to src/GitTfs.Core/Core/ITfsWorkspace.cs diff --git a/src/GitTfs/Core/ITreeEntry.cs b/src/GitTfs.Core/Core/ITreeEntry.cs similarity index 100% rename from src/GitTfs/Core/ITreeEntry.cs rename to src/GitTfs.Core/Core/ITreeEntry.cs diff --git a/src/GitTfs/Core/Janitor.cs b/src/GitTfs.Core/Core/Janitor.cs similarity index 100% rename from src/GitTfs/Core/Janitor.cs rename to src/GitTfs.Core/Core/Janitor.cs diff --git a/src/GitTfs/Core/LogEntry.cs b/src/GitTfs.Core/Core/LogEntry.cs similarity index 100% rename from src/GitTfs/Core/LogEntry.cs rename to src/GitTfs.Core/Core/LogEntry.cs diff --git a/src/GitTfs/Core/Mode.cs b/src/GitTfs.Core/Core/Mode.cs similarity index 100% rename from src/GitTfs/Core/Mode.cs rename to src/GitTfs.Core/Core/Mode.cs diff --git a/src/GitTfs/Core/RemoteConfigConverter.cs b/src/GitTfs.Core/Core/RemoteConfigConverter.cs similarity index 100% rename from src/GitTfs/Core/RemoteConfigConverter.cs rename to src/GitTfs.Core/Core/RemoteConfigConverter.cs diff --git a/src/GitTfs/Core/RemoteInfo.cs b/src/GitTfs.Core/Core/RemoteInfo.cs similarity index 100% rename from src/GitTfs/Core/RemoteInfo.cs rename to src/GitTfs.Core/Core/RemoteInfo.cs diff --git a/src/GitTfs/Core/RequiresValidGitRepositoryAttribute.cs b/src/GitTfs.Core/Core/RequiresValidGitRepositoryAttribute.cs similarity index 100% rename from src/GitTfs/Core/RequiresValidGitRepositoryAttribute.cs rename to src/GitTfs.Core/Core/RequiresValidGitRepositoryAttribute.cs diff --git a/src/GitTfs/Core/TfsChangeset.cs b/src/GitTfs.Core/Core/TfsChangeset.cs similarity index 100% rename from src/GitTfs/Core/TfsChangeset.cs rename to src/GitTfs.Core/Core/TfsChangeset.cs diff --git a/src/GitTfs/Core/TfsChangesetInfo.cs b/src/GitTfs.Core/Core/TfsChangesetInfo.cs similarity index 100% rename from src/GitTfs/Core/TfsChangesetInfo.cs rename to src/GitTfs.Core/Core/TfsChangesetInfo.cs diff --git a/src/GitTfs/Core/TfsCheckinNote.cs b/src/GitTfs.Core/Core/TfsCheckinNote.cs similarity index 100% rename from src/GitTfs/Core/TfsCheckinNote.cs rename to src/GitTfs.Core/Core/TfsCheckinNote.cs diff --git a/src/GitTfs/Core/TfsInterop/IBranch.cs b/src/GitTfs.Core/Core/TfsInterop/IBranch.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IBranch.cs rename to src/GitTfs.Core/Core/TfsInterop/IBranch.cs diff --git a/src/GitTfs/Core/TfsInterop/IChange.cs b/src/GitTfs.Core/Core/TfsInterop/IChange.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IChange.cs rename to src/GitTfs.Core/Core/TfsInterop/IChange.cs diff --git a/src/GitTfs/Core/TfsInterop/IChangeset.cs b/src/GitTfs.Core/Core/TfsInterop/IChangeset.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IChangeset.cs rename to src/GitTfs.Core/Core/TfsInterop/IChangeset.cs diff --git a/src/GitTfs/Core/TfsInterop/ICheckinEvaluationResult.cs b/src/GitTfs.Core/Core/TfsInterop/ICheckinEvaluationResult.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/ICheckinEvaluationResult.cs rename to src/GitTfs.Core/Core/TfsInterop/ICheckinEvaluationResult.cs diff --git a/src/GitTfs/Core/TfsInterop/ICheckinNote.cs b/src/GitTfs.Core/Core/TfsInterop/ICheckinNote.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/ICheckinNote.cs rename to src/GitTfs.Core/Core/TfsInterop/ICheckinNote.cs diff --git a/src/GitTfs/Core/TfsInterop/IIdentity.cs b/src/GitTfs.Core/Core/TfsInterop/IIdentity.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IIdentity.cs rename to src/GitTfs.Core/Core/TfsInterop/IIdentity.cs diff --git a/src/GitTfs/Core/TfsInterop/IItem.cs b/src/GitTfs.Core/Core/TfsInterop/IItem.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IItem.cs rename to src/GitTfs.Core/Core/TfsInterop/IItem.cs diff --git a/src/GitTfs/Core/TfsInterop/IPendingChange.cs b/src/GitTfs.Core/Core/TfsInterop/IPendingChange.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IPendingChange.cs rename to src/GitTfs.Core/Core/TfsInterop/IPendingChange.cs diff --git a/src/GitTfs/Core/TfsInterop/IShelveset.cs b/src/GitTfs.Core/Core/TfsInterop/IShelveset.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IShelveset.cs rename to src/GitTfs.Core/Core/TfsInterop/IShelveset.cs diff --git a/src/GitTfs/Core/TfsInterop/ITfsHelper.cs b/src/GitTfs.Core/Core/TfsInterop/ITfsHelper.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/ITfsHelper.cs rename to src/GitTfs.Core/Core/TfsInterop/ITfsHelper.cs diff --git a/src/GitTfs/Core/TfsInterop/IVersionControlServer.cs b/src/GitTfs.Core/Core/TfsInterop/IVersionControlServer.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IVersionControlServer.cs rename to src/GitTfs.Core/Core/TfsInterop/IVersionControlServer.cs diff --git a/src/GitTfs/Core/TfsInterop/IWorkItemCheckedInfo.cs b/src/GitTfs.Core/Core/TfsInterop/IWorkItemCheckedInfo.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IWorkItemCheckedInfo.cs rename to src/GitTfs.Core/Core/TfsInterop/IWorkItemCheckedInfo.cs diff --git a/src/GitTfs/Core/TfsInterop/IWorkItemCheckinInfo.cs b/src/GitTfs.Core/Core/TfsInterop/IWorkItemCheckinInfo.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IWorkItemCheckinInfo.cs rename to src/GitTfs.Core/Core/TfsInterop/IWorkItemCheckinInfo.cs diff --git a/src/GitTfs/Core/TfsInterop/IWorkspace.cs b/src/GitTfs.Core/Core/TfsInterop/IWorkspace.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/IWorkspace.cs rename to src/GitTfs.Core/Core/TfsInterop/IWorkspace.cs diff --git a/src/GitTfs/Core/TfsInterop/NullIdentity.cs b/src/GitTfs.Core/Core/TfsInterop/NullIdentity.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/NullIdentity.cs rename to src/GitTfs.Core/Core/TfsInterop/NullIdentity.cs diff --git a/src/GitTfs/Core/TfsInterop/README.txt b/src/GitTfs.Core/Core/TfsInterop/README.txt similarity index 100% rename from src/GitTfs/Core/TfsInterop/README.txt rename to src/GitTfs.Core/Core/TfsInterop/README.txt diff --git a/src/GitTfs/Core/TfsInterop/RootBranch.cs b/src/GitTfs.Core/Core/TfsInterop/RootBranch.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/RootBranch.cs rename to src/GitTfs.Core/Core/TfsInterop/RootBranch.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsApiBridge.cs b/src/GitTfs.Core/Core/TfsInterop/TfsApiBridge.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsApiBridge.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsApiBridge.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsChangeType.cs b/src/GitTfs.Core/Core/TfsInterop/TfsChangeType.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsChangeType.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsChangeType.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsCheckinEvaluationOptions.cs b/src/GitTfs.Core/Core/TfsInterop/TfsCheckinEvaluationOptions.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsCheckinEvaluationOptions.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsCheckinEvaluationOptions.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsExt.cs b/src/GitTfs.Core/Core/TfsInterop/TfsExt.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsExt.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsExt.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsItemType.cs b/src/GitTfs.Core/Core/TfsInterop/TfsItemType.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsItemType.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsItemType.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsPlugin.cs b/src/GitTfs.Core/Core/TfsInterop/TfsPlugin.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsPlugin.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsPlugin.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsRecursionType.cs b/src/GitTfs.Core/Core/TfsInterop/TfsRecursionType.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsRecursionType.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsRecursionType.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsShelvingOptions.cs b/src/GitTfs.Core/Core/TfsInterop/TfsShelvingOptions.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsShelvingOptions.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsShelvingOptions.cs diff --git a/src/GitTfs/Core/TfsInterop/TfsWorkItemCheckinAction.cs b/src/GitTfs.Core/Core/TfsInterop/TfsWorkItemCheckinAction.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/TfsWorkItemCheckinAction.cs rename to src/GitTfs.Core/Core/TfsInterop/TfsWorkItemCheckinAction.cs diff --git a/src/GitTfs/Core/TfsInterop/WrapperFor.cs b/src/GitTfs.Core/Core/TfsInterop/WrapperFor.cs similarity index 100% rename from src/GitTfs/Core/TfsInterop/WrapperFor.cs rename to src/GitTfs.Core/Core/TfsInterop/WrapperFor.cs diff --git a/src/GitTfs/Core/TfsLabel.cs b/src/GitTfs.Core/Core/TfsLabel.cs similarity index 100% rename from src/GitTfs/Core/TfsLabel.cs rename to src/GitTfs.Core/Core/TfsLabel.cs diff --git a/src/GitTfs/Core/TfsTreeEntry.cs b/src/GitTfs.Core/Core/TfsTreeEntry.cs similarity index 100% rename from src/GitTfs/Core/TfsTreeEntry.cs rename to src/GitTfs.Core/Core/TfsTreeEntry.cs diff --git a/src/GitTfs/Core/TfsWorkitem.cs b/src/GitTfs.Core/Core/TfsWorkitem.cs similarity index 100% rename from src/GitTfs/Core/TfsWorkitem.cs rename to src/GitTfs.Core/Core/TfsWorkitem.cs diff --git a/src/GitTfs/Core/TfsWorkspace.cs b/src/GitTfs.Core/Core/TfsWorkspace.cs similarity index 100% rename from src/GitTfs/Core/TfsWorkspace.cs rename to src/GitTfs.Core/Core/TfsWorkspace.cs diff --git a/src/GitTfs/Core/TfsWriter.cs b/src/GitTfs.Core/Core/TfsWriter.cs similarity index 100% rename from src/GitTfs/Core/TfsWriter.cs rename to src/GitTfs.Core/Core/TfsWriter.cs diff --git a/src/GitTfs.Core/GitTfs.Core.csproj b/src/GitTfs.Core/GitTfs.Core.csproj new file mode 100644 index 000000000..9edbddd0b --- /dev/null +++ b/src/GitTfs.Core/GitTfs.Core.csproj @@ -0,0 +1,16 @@ + + + + + Properties\CommonAssemblyInfo.cs + + + + + + + + + + + \ No newline at end of file diff --git a/src/GitTfs/GitTfsCommand.cs b/src/GitTfs.Core/GitTfsCommand.cs similarity index 100% rename from src/GitTfs/GitTfsCommand.cs rename to src/GitTfs.Core/GitTfsCommand.cs diff --git a/src/GitTfs/GitTfsConstants.cs b/src/GitTfs.Core/GitTfsConstants.cs similarity index 100% rename from src/GitTfs/GitTfsConstants.cs rename to src/GitTfs.Core/GitTfsConstants.cs diff --git a/src/GitTfs/GitTfsExitCodes.cs b/src/GitTfs.Core/GitTfsExitCodes.cs similarity index 100% rename from src/GitTfs/GitTfsExitCodes.cs rename to src/GitTfs.Core/GitTfsExitCodes.cs diff --git a/src/GitTfs/Globals.cs b/src/GitTfs.Core/Globals.cs similarity index 100% rename from src/GitTfs/Globals.cs rename to src/GitTfs.Core/Globals.cs diff --git a/src/GitTfs/Util/AuthorsFile.cs b/src/GitTfs.Core/Util/AuthorsFile.cs similarity index 100% rename from src/GitTfs/Util/AuthorsFile.cs rename to src/GitTfs.Core/Util/AuthorsFile.cs diff --git a/src/GitTfs/Util/Bouncer.cs b/src/GitTfs.Core/Util/Bouncer.cs similarity index 100% rename from src/GitTfs/Util/Bouncer.cs rename to src/GitTfs.Core/Util/Bouncer.cs diff --git a/src/GitTfs/Util/CamelCaseToDelimitedStringConverter.cs b/src/GitTfs.Core/Util/CamelCaseToDelimitedStringConverter.cs similarity index 100% rename from src/GitTfs/Util/CamelCaseToDelimitedStringConverter.cs rename to src/GitTfs.Core/Util/CamelCaseToDelimitedStringConverter.cs diff --git a/src/GitTfs/Util/ChangeSieve.cs b/src/GitTfs.Core/Util/ChangeSieve.cs similarity index 100% rename from src/GitTfs/Util/ChangeSieve.cs rename to src/GitTfs.Core/Util/ChangeSieve.cs diff --git a/src/GitTfs/Util/ConfigPropertyLoader.cs b/src/GitTfs.Core/Util/ConfigPropertyLoader.cs similarity index 100% rename from src/GitTfs/Util/ConfigPropertyLoader.cs rename to src/GitTfs.Core/Util/ConfigPropertyLoader.cs diff --git a/src/GitTfs/Util/ConfiguresStructureMap.cs b/src/GitTfs.Core/Util/ConfiguresStructureMap.cs similarity index 100% rename from src/GitTfs/Util/ConfiguresStructureMap.cs rename to src/GitTfs.Core/Util/ConfiguresStructureMap.cs diff --git a/src/GitTfs/Util/ExportMetadatasInitializer.cs b/src/GitTfs.Core/Util/ExportMetadatasInitializer.cs similarity index 100% rename from src/GitTfs/Util/ExportMetadatasInitializer.cs rename to src/GitTfs.Core/Util/ExportMetadatasInitializer.cs diff --git a/src/GitTfs/Util/InspectExtensions.cs b/src/GitTfs.Core/Util/InspectExtensions.cs similarity index 98% rename from src/GitTfs/Util/InspectExtensions.cs rename to src/GitTfs.Core/Util/InspectExtensions.cs index cff82fa2f..c4f453675 100644 --- a/src/GitTfs/Util/InspectExtensions.cs +++ b/src/GitTfs.Core/Util/InspectExtensions.cs @@ -1,7 +1,7 @@ -using System.Collections; +using System.Collections; using System.Text.RegularExpressions; -namespace GitTfs.Extensions +namespace GitTfs.Util { public static class InspectExtensions { diff --git a/src/GitTfs/Util/PathResolver.cs b/src/GitTfs.Core/Util/PathResolver.cs similarity index 100% rename from src/GitTfs/Util/PathResolver.cs rename to src/GitTfs.Core/Util/PathResolver.cs diff --git a/src/GitTfs.Core/Util/StringExtensions.cs b/src/GitTfs.Core/Util/StringExtensions.cs new file mode 100644 index 000000000..7fc59f459 --- /dev/null +++ b/src/GitTfs.Core/Util/StringExtensions.cs @@ -0,0 +1,76 @@ + +using System.Text.RegularExpressions; + +using GitTfs.Core; + +namespace GitTfs.Util +{ + public static class StringExtensions + { + private static readonly Regex ValidTfsPath = new Regex("^\\$/.+"); + public static bool IsValidTfsPath(this string tfsPath) => ValidTfsPath.IsMatch(tfsPath); + + public static void AssertValidTfsPathOrRoot(this string tfsPath) + { + if (tfsPath == GitTfsConstants.TfsRoot) + return; + AssertValidTfsPath(tfsPath); + } + + public static void AssertValidTfsPath(this string tfsPath) + { + if (!ValidTfsPath.IsMatch(tfsPath)) + throw new GitTfsException("TFS repository can not be root and must start with \"$/\".", SuggestPaths(tfsPath)); + } + + private static IEnumerable SuggestPaths(string tfsPath) + { + if (tfsPath == "$" || tfsPath == "$/") + yield return "Cloning an entire TFS repository is not supported. Try using a subdirectory of the root (e.g. $/MyProject)."; + else if (tfsPath.StartsWith("$")) + yield return "Try using $/" + tfsPath.Substring(1); + else + yield return "Try using $/" + tfsPath; + } + + public static string ToGitRefName(this string expectedRefName) + { + expectedRefName = Regex.Replace(expectedRefName, @"[!~$?[*^: \\]", string.Empty); + expectedRefName = expectedRefName.Replace("@{", string.Empty); + expectedRefName = expectedRefName.Replace("..", string.Empty); + expectedRefName = expectedRefName.Replace("//", string.Empty); + expectedRefName = expectedRefName.Replace("/.", "/"); + expectedRefName = expectedRefName.TrimEnd('.', '/'); + return expectedRefName.Trim('/'); + } + + public static string ToGitBranchNameFromTfsRepositoryPath(this string tfsRepositoryPath, bool includeTeamProjectName = false) + { + if (includeTeamProjectName) + { + return tfsRepositoryPath + .Replace("$/", string.Empty) + .ToGitRefName(); + } + + string gitBranchNameExpected = tfsRepositoryPath.IndexOf("$/") == 0 + ? tfsRepositoryPath.Remove(0, tfsRepositoryPath.IndexOf('/', 2) + 1) + : tfsRepositoryPath; + + return gitBranchNameExpected.ToGitRefName(); + } + + public static string ToTfsTeamProjectRepositoryPath(this string tfsRepositoryPath) + { + if (!tfsRepositoryPath.StartsWith("$/")) + { + return tfsRepositoryPath; + } + + var index = tfsRepositoryPath.IndexOf('/', 2); + return index == -1 ? tfsRepositoryPath : tfsRepositoryPath.Remove(index, tfsRepositoryPath.Length - index); + } + + public static string ToLocalGitRef(this string refName) => "refs/heads/" + refName; + } +} diff --git a/src/GitTfs/Util/StructureMapSingletonAttribute.cs b/src/GitTfs.Core/Util/StructureMapSingletonAttribute.cs similarity index 100% rename from src/GitTfs/Util/StructureMapSingletonAttribute.cs rename to src/GitTfs.Core/Util/StructureMapSingletonAttribute.cs diff --git a/src/GitTfs/Util/TemporaryFile.cs b/src/GitTfs.Core/Util/TemporaryFile.cs similarity index 100% rename from src/GitTfs/Util/TemporaryFile.cs rename to src/GitTfs.Core/Util/TemporaryFile.cs diff --git a/src/GitTfs/Util/TemporaryFileStream.cs b/src/GitTfs.Core/Util/TemporaryFileStream.cs similarity index 100% rename from src/GitTfs/Util/TemporaryFileStream.cs rename to src/GitTfs.Core/Util/TemporaryFileStream.cs diff --git a/src/GitTfs/Util/WhenDynamicDoesntWork.cs b/src/GitTfs.Core/Util/WhenDynamicDoesntWork.cs similarity index 100% rename from src/GitTfs/Util/WhenDynamicDoesntWork.cs rename to src/GitTfs.Core/Util/WhenDynamicDoesntWork.cs diff --git a/src/GitTfs.Core/paket.references b/src/GitTfs.Core/paket.references new file mode 100644 index 000000000..9630dcaa8 --- /dev/null +++ b/src/GitTfs.Core/paket.references @@ -0,0 +1,3 @@ +LibGit2Sharp +nlog +structuremap \ No newline at end of file diff --git a/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj b/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj index b61ad2765..ec37d1ce8 100644 --- a/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj +++ b/src/GitTfs.Vs2019/GitTfs.Vs2019.csproj @@ -25,7 +25,7 @@ - + diff --git a/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj b/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj index b61ad2765..3f5b25977 100644 --- a/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj +++ b/src/GitTfs.Vs2022/GitTfs.Vs2022.csproj @@ -24,9 +24,9 @@ Wrappers.cs - - - + + + diff --git a/src/GitTfs.VsCommon/TfsHelper.Common.cs b/src/GitTfs.VsCommon/TfsHelper.Common.cs index 987ab670a..0f908dad2 100644 --- a/src/GitTfs.VsCommon/TfsHelper.Common.cs +++ b/src/GitTfs.VsCommon/TfsHelper.Common.cs @@ -1,4 +1,4 @@ -using System.Diagnostics; +using System.Diagnostics; using System.Net; using System.Reflection; using Microsoft.TeamFoundation.Client; @@ -8,7 +8,6 @@ using GitTfs.Commands; using GitTfs.Core; using GitTfs.Core.TfsInterop; -using GitTfs.Extensions; using GitTfs.Util; using StructureMap; using StructureMap.Attributes; diff --git a/src/GitTfs.VsFake/GitTfs.VsFake.csproj b/src/GitTfs.VsFake/GitTfs.VsFake.csproj index f33172334..2fc21030a 100644 --- a/src/GitTfs.VsFake/GitTfs.VsFake.csproj +++ b/src/GitTfs.VsFake/GitTfs.VsFake.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/GitTfs.slnx b/src/GitTfs.slnx index abdf51568..39fcbbd8b 100644 --- a/src/GitTfs.slnx +++ b/src/GitTfs.slnx @@ -19,6 +19,7 @@ + diff --git a/src/GitTfs/Commands/Branch.cs b/src/GitTfs/Commands/Branch.cs index efe3816c1..6cd414554 100644 --- a/src/GitTfs/Commands/Branch.cs +++ b/src/GitTfs/Commands/Branch.cs @@ -3,7 +3,7 @@ using NDesk.Options; using GitTfs.Core; using GitTfs.Core.TfsInterop; -using StructureMap; +using GitTfs.Util; using System.Text; namespace GitTfs.Commands diff --git a/src/GitTfs/Commands/Checkout.cs b/src/GitTfs/Commands/Checkout.cs index 0c988218f..70575dc7e 100644 --- a/src/GitTfs/Commands/Checkout.cs +++ b/src/GitTfs/Commands/Checkout.cs @@ -1,7 +1,7 @@ -using System.ComponentModel; +using System.ComponentModel; using NDesk.Options; using GitTfs.Core; -using StructureMap; +using GitTfs.Util; using System.Diagnostics; namespace GitTfs.Commands diff --git a/src/GitTfs/Commands/Init.cs b/src/GitTfs/Commands/Init.cs index effa1aa3a..9abe0d634 100644 --- a/src/GitTfs/Commands/Init.cs +++ b/src/GitTfs/Commands/Init.cs @@ -187,73 +187,4 @@ private void GitTfsInit(string tfsUrl, string tfsRepositoryPath) => _globals.Rep RemoteOptions = _remoteOptions, }); } - - public static class Ext - { - private static readonly Regex ValidTfsPath = new Regex("^\\$/.+"); - public static bool IsValidTfsPath(this string tfsPath) => ValidTfsPath.IsMatch(tfsPath); - - public static void AssertValidTfsPathOrRoot(this string tfsPath) - { - if (tfsPath == GitTfsConstants.TfsRoot) - return; - AssertValidTfsPath(tfsPath); - } - - public static void AssertValidTfsPath(this string tfsPath) - { - if (!ValidTfsPath.IsMatch(tfsPath)) - throw new GitTfsException("TFS repository can not be root and must start with \"$/\".", SuggestPaths(tfsPath)); - } - - private static IEnumerable SuggestPaths(string tfsPath) - { - if (tfsPath == "$" || tfsPath == "$/") - yield return "Cloning an entire TFS repository is not supported. Try using a subdirectory of the root (e.g. $/MyProject)."; - else if (tfsPath.StartsWith("$")) - yield return "Try using $/" + tfsPath.Substring(1); - else - yield return "Try using $/" + tfsPath; - } - - public static string ToGitRefName(this string expectedRefName) - { - expectedRefName = Regex.Replace(expectedRefName, @"[!~$?[*^: \\]", string.Empty); - expectedRefName = expectedRefName.Replace("@{", string.Empty); - expectedRefName = expectedRefName.Replace("..", string.Empty); - expectedRefName = expectedRefName.Replace("//", string.Empty); - expectedRefName = expectedRefName.Replace("/.", "/"); - expectedRefName = expectedRefName.TrimEnd('.', '/'); - return expectedRefName.Trim('/'); - } - - public static string ToGitBranchNameFromTfsRepositoryPath(this string tfsRepositoryPath, bool includeTeamProjectName = false) - { - if (includeTeamProjectName) - { - return tfsRepositoryPath - .Replace("$/", string.Empty) - .ToGitRefName(); - } - - string gitBranchNameExpected = tfsRepositoryPath.IndexOf("$/") == 0 - ? tfsRepositoryPath.Remove(0, tfsRepositoryPath.IndexOf('/', 2) + 1) - : tfsRepositoryPath; - - return gitBranchNameExpected.ToGitRefName(); - } - - public static string ToTfsTeamProjectRepositoryPath(this string tfsRepositoryPath) - { - if (!tfsRepositoryPath.StartsWith("$/")) - { - return tfsRepositoryPath; - } - - var index = tfsRepositoryPath.IndexOf('/', 2); - return index == -1 ? tfsRepositoryPath : tfsRepositoryPath.Remove(index, tfsRepositoryPath.Length - index); - } - - public static string ToLocalGitRef(this string refName) => "refs/heads/" + refName; - } } diff --git a/src/GitTfs/GitTfs.csproj b/src/GitTfs/GitTfs.csproj index 6de90217f..600fc7c9c 100644 --- a/src/GitTfs/GitTfs.csproj +++ b/src/GitTfs/GitTfs.csproj @@ -23,15 +23,14 @@ - - + \ No newline at end of file diff --git a/src/GitTfsTest/Commands/ExtTest.cs b/src/GitTfsTest/Commands/ExtTest.cs index 63aadd178..3d4b374d1 100644 --- a/src/GitTfsTest/Commands/ExtTest.cs +++ b/src/GitTfsTest/Commands/ExtTest.cs @@ -1,5 +1,5 @@ -using GitTfs.Commands; using GitTfs.Core; +using GitTfs.Util; using Xunit; namespace GitTfs.Test.Commands diff --git a/src/GitTfsTest/GitTfsTest.csproj b/src/GitTfsTest/GitTfsTest.csproj index 39866c953..4a89ee314 100644 --- a/src/GitTfsTest/GitTfsTest.csproj +++ b/src/GitTfsTest/GitTfsTest.csproj @@ -15,7 +15,7 @@ - + From b330d2369f74096cd6387897f497f19ed1ec3967 Mon Sep 17 00:00:00 2001 From: Arthur Moore Date: Tue, 5 May 2026 18:31:38 -0400 Subject: [PATCH 7/7] Remove StructureMapSingletonAttribute Does not work with multiple assemblies. --- src/GitTfs.Core/Commands/CheckinOptions.cs | 4 +--- src/GitTfs.Core/Commands/RemoteOptions.cs | 2 -- src/GitTfs.Core/Core/Janitor.cs | 3 --- src/GitTfs.Core/Globals.cs | 2 -- src/GitTfs.Core/Util/AuthorsFile.cs | 4 ++-- src/GitTfs.Core/Util/ConfigPropertyLoader.cs | 1 - src/GitTfs.Core/Util/ConfiguresStructureMap.cs | 9 --------- .../Util/StructureMapSingletonAttribute.cs | 10 ---------- src/GitTfs/Commands/CleanupOptions.cs | 4 +--- src/GitTfs/Commands/InitOptions.cs | 2 -- src/GitTfs/Program.cs | 17 ++++++++++------- src/GitTfs/Util/GitTfsCommandFactory.cs | 3 +-- 12 files changed, 15 insertions(+), 46 deletions(-) delete mode 100644 src/GitTfs.Core/Util/ConfiguresStructureMap.cs delete mode 100644 src/GitTfs.Core/Util/StructureMapSingletonAttribute.cs diff --git a/src/GitTfs.Core/Commands/CheckinOptions.cs b/src/GitTfs.Core/Commands/CheckinOptions.cs index 1c7de0ec8..261453354 100644 --- a/src/GitTfs.Core/Commands/CheckinOptions.cs +++ b/src/GitTfs.Core/Commands/CheckinOptions.cs @@ -1,10 +1,8 @@ -using System.Text.RegularExpressions; +using System.Text.RegularExpressions; using NDesk.Options; -using GitTfs.Util; namespace GitTfs.Commands { - [StructureMapSingleton] public class CheckinOptions { public OptionSet OptionSet => new OptionSet diff --git a/src/GitTfs.Core/Commands/RemoteOptions.cs b/src/GitTfs.Core/Commands/RemoteOptions.cs index 0039b9e34..26c024fb6 100644 --- a/src/GitTfs.Core/Commands/RemoteOptions.cs +++ b/src/GitTfs.Core/Commands/RemoteOptions.cs @@ -1,9 +1,7 @@ -using GitTfs.Util; using NDesk.Options; namespace GitTfs.Commands { - [StructureMapSingleton] public class RemoteOptions { public OptionSet OptionSet => new OptionSet diff --git a/src/GitTfs.Core/Core/Janitor.cs b/src/GitTfs.Core/Core/Janitor.cs index 9ceab8d3d..b3e78a8d1 100644 --- a/src/GitTfs.Core/Core/Janitor.cs +++ b/src/GitTfs.Core/Core/Janitor.cs @@ -1,10 +1,7 @@ -using GitTfs.Util; - using System.Diagnostics; namespace GitTfs.Core { - [StructureMapSingleton] public class Janitor : IDisposable { private readonly Queue _actions = new Queue(); diff --git a/src/GitTfs.Core/Globals.cs b/src/GitTfs.Core/Globals.cs index 559bcffb3..880f6d470 100644 --- a/src/GitTfs.Core/Globals.cs +++ b/src/GitTfs.Core/Globals.cs @@ -1,11 +1,9 @@ using System.Diagnostics; using NDesk.Options; using GitTfs.Core; -using GitTfs.Util; namespace GitTfs { - [StructureMapSingleton] public class Globals { public OptionSet OptionSet => new OptionSet diff --git a/src/GitTfs.Core/Util/AuthorsFile.cs b/src/GitTfs.Core/Util/AuthorsFile.cs index 47b2ba876..192de9ae3 100644 --- a/src/GitTfs.Core/Util/AuthorsFile.cs +++ b/src/GitTfs.Core/Util/AuthorsFile.cs @@ -1,4 +1,4 @@ -using System.Text.RegularExpressions; +using System.Text.RegularExpressions; using GitTfs.Core; using System.Diagnostics; @@ -35,7 +35,7 @@ public Author(string tfsUserId, string name, string email) #endregion } - [StructureMapSingleton] + public class AuthorsFile { private readonly Dictionary _authorsByTfsUserId = new Dictionary(StringComparer.OrdinalIgnoreCase); diff --git a/src/GitTfs.Core/Util/ConfigPropertyLoader.cs b/src/GitTfs.Core/Util/ConfigPropertyLoader.cs index b07a94872..72de2ec03 100644 --- a/src/GitTfs.Core/Util/ConfigPropertyLoader.cs +++ b/src/GitTfs.Core/Util/ConfigPropertyLoader.cs @@ -1,7 +1,6 @@ namespace GitTfs.Util { // Manages configurable values. - [StructureMapSingleton] public class ConfigPropertyLoader { private readonly Globals _globals; diff --git a/src/GitTfs.Core/Util/ConfiguresStructureMap.cs b/src/GitTfs.Core/Util/ConfiguresStructureMap.cs deleted file mode 100644 index 535372224..000000000 --- a/src/GitTfs.Core/Util/ConfiguresStructureMap.cs +++ /dev/null @@ -1,9 +0,0 @@ -using StructureMap; - -namespace GitTfs.Util -{ - public interface ConfiguresStructureMap - { - void Initialize(ConfigurationExpression initializer, Type t); - } -} \ No newline at end of file diff --git a/src/GitTfs.Core/Util/StructureMapSingletonAttribute.cs b/src/GitTfs.Core/Util/StructureMapSingletonAttribute.cs deleted file mode 100644 index 3f2ed5409..000000000 --- a/src/GitTfs.Core/Util/StructureMapSingletonAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -using StructureMap; - -namespace GitTfs.Util -{ - [AttributeUsage(AttributeTargets.Class)] - public class StructureMapSingletonAttribute : Attribute, ConfiguresStructureMap - { - public void Initialize(ConfigurationExpression initializer, Type t) => initializer.For(t).Singleton().Use(t); - } -} \ No newline at end of file diff --git a/src/GitTfs/Commands/CleanupOptions.cs b/src/GitTfs/Commands/CleanupOptions.cs index 52acf5efe..e6632ba19 100644 --- a/src/GitTfs/Commands/CleanupOptions.cs +++ b/src/GitTfs/Commands/CleanupOptions.cs @@ -1,9 +1,7 @@ -using NDesk.Options; -using GitTfs.Util; +using NDesk.Options; namespace GitTfs.Commands { - [StructureMapSingleton] public class CleanupOptions { private readonly Globals _globals; diff --git a/src/GitTfs/Commands/InitOptions.cs b/src/GitTfs/Commands/InitOptions.cs index d43648a28..6486c105d 100644 --- a/src/GitTfs/Commands/InitOptions.cs +++ b/src/GitTfs/Commands/InitOptions.cs @@ -1,9 +1,7 @@ using NDesk.Options; -using GitTfs.Util; namespace GitTfs.Commands { - [StructureMapSingleton] public class InitOptions { private const string DefaultAutocrlf = "false"; diff --git a/src/GitTfs/Program.cs b/src/GitTfs/Program.cs index 900aee740..6b3e0180f 100644 --- a/src/GitTfs/Program.cs +++ b/src/GitTfs/Program.cs @@ -215,13 +215,16 @@ private static void Initialize(IAssemblyScanner scan) private static void DoCustomConfiguration(ConfigurationExpression initializer) { - foreach (var type in typeof(Program).Assembly.GetTypes()) - { - foreach (ConfiguresStructureMap attribute in type.GetCustomAttributes(typeof(ConfiguresStructureMap), false)) - { - attribute.Initialize(initializer, type); - } - } + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); + + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); + initializer.For().Singleton().Use(); } } } diff --git a/src/GitTfs/Util/GitTfsCommandFactory.cs b/src/GitTfs/Util/GitTfsCommandFactory.cs index 23a2546af..4cc28c0d4 100644 --- a/src/GitTfs/Util/GitTfsCommandFactory.cs +++ b/src/GitTfs/Util/GitTfsCommandFactory.cs @@ -1,8 +1,7 @@ -using StructureMap; +using StructureMap; namespace GitTfs.Util { - [StructureMapSingleton] public class GitTfsCommandFactory { private readonly IContainer _container;