async Task<Package> CheckoutAsync(string packageName, bool? useFullNameOverride = null) {
var useFullName = Repo.Config.UseVersionedPackageFolders;
if (useFullNameOverride.HasValue)
useFullName = useFullNameOverride.Value;
var depInfo = Repo.ResolvePackageName(packageName);
if (depInfo == null)
throw new Exception("Could not resolve package " + packageName);
var resolvedPackageName = depInfo.GetFullName();
IAbsoluteDirectoryPath dir;
if (Repo.Config.OperationMode == RepositoryOperationMode.SinglePackage)
dir = WorkDir;
else {
var name = useFullName ? depInfo.GetFullName() : depInfo.Name;
var repoRoot = Repo.RootPath.ParentDirectoryPath;
//dir = Path.Combine(repoRoot, name);
var d = Tools.FileUtil.IsPathRootedIn(WorkDir, repoRoot, true) ? repoRoot : WorkDir;
dir = d.GetChildDirectoryWithName(name);
}
Repository.Log("\nChecking out {0} into {1}, please be patient...", resolvedPackageName, dir);
var package = Package.Factory.Open(Repo, dir, resolvedPackageName);
package.StatusRepo = StatusRepo;
await package.CheckoutAsync(null).ConfigureAwait(false);
Repository.Log("\nSuccesfully checked out {0}", package.MetaData.GetFullName());
return package;
}