// test clone validity and register // @handled @logs private static void VerifyAndRegisterClone(string cloneName, string clonePath) { try { PyRevitClone.VerifyCloneValidity(clonePath); logger.Debug("Clone successful \"{0}\"", clonePath); RegisterClone(cloneName, clonePath); } catch (Exception ex) { logger.Debug(string.Format("Exception occured after clone complete. Deleting clone \"{0}\" | {1}", clonePath, ex.Message)); try { CommonUtils.DeleteDirectory(clonePath); } catch (Exception delEx) { logger.Error(string.Format("Error post-install cleanup on \"{0}\" | {1}", clonePath, delEx.Message)); } // cleanup completed, now baloon up the exception throw ex; } }
// install pyRevit by cloning from git repo // @handled @logs public static void DeployFromRepo(string cloneName, string deploymentName = null, string branchName = null, string repoUrl = null, string destPath = null, string username = null, string password = null) { string repoSourcePath = repoUrl ?? PyRevitLabsConsts.OriginalRepoGitPath; string repoBranch = branchName != null ? branchName : PyRevitLabsConsts.TragetBranch; logger.Debug("Repo source determined as \"{0}:{1}\"", repoSourcePath, repoBranch); // determine destination path if not provided if (destPath is null) { destPath = Path.Combine(PyRevitLabsConsts.PyRevitPath, PyRevitConsts.DefaultCloneInstallName); } logger.Debug("Destination path determined as \"{0}\"", destPath); // make sure destPath exists CommonUtils.EnsurePath(destPath); // check existing destination path if (CommonUtils.VerifyPath(destPath)) { logger.Debug("Destination path already exists {0}", destPath); destPath = Path.Combine(destPath, cloneName); logger.Debug("Using subpath {0}", destPath); if (CommonUtils.VerifyPath(destPath)) { throw new PyRevitException(string.Format("Destination path already exists \"{0}\"", destPath)); } } // start the clone process LibGit2Sharp.Repository repo = null; if (deploymentName != null) { // TODO: Add core checkout option. Figure out how to checkout certain folders in libgit2sharp throw new NotImplementedException("Deployment with git clones not implemented yet."); } else { repo = GitInstaller.Clone(repoSourcePath, repoBranch, destPath, username, password); } // Check installation if (repo != null) { // make sure to delete the repo if error occured after cloning var clonedPath = repo.Info.WorkingDirectory; try { PyRevitClone.VerifyCloneValidity(clonedPath); logger.Debug("Clone successful \"{0}\"", clonedPath); RegisterClone(cloneName, clonedPath); } catch (Exception ex) { logger.Debug(string.Format("Exception occured after clone complete. Deleting clone \"{0}\" | {1}", clonedPath, ex.Message)); try { CommonUtils.DeleteDirectory(clonedPath); } catch (Exception delEx) { logger.Error(string.Format("Error post-install cleanup on \"{0}\" | {1}", clonedPath, delEx.Message)); } // cleanup completed, now baloon up the exception throw ex; } } else { throw new PyRevitException(string.Format("Error installing pyRevit. Null repo error on \"{0}\"", repoUrl)); } }