in newt/cli/pkg_cmds.go [70:163]
func pkgCloneOrMoveCmd(cmd *cobra.Command, args []string, dirOpFn dirOperation, opStr string) {
if len(args) != 2 {
NewtUsage(cmd, util.NewNewtError("Exactly two arguments required to pkg move"))
}
srcLoc := args[0]
dstLoc := args[1]
proj := TryGetProject()
interfaces.SetProject(proj)
wd, err := os.Getwd()
if err != nil {
NewtUsage(cmd, util.ChildNewtError(err))
}
if err := os.Chdir(proj.Path() + "/"); err != nil {
NewtUsage(cmd, util.ChildNewtError(err))
}
defer os.Chdir(wd)
/* Find source package, defaulting search to the local project if no
* repository descriptor is found.
*/
srcRepoName, srcName, err := newtutil.ParsePackageString(srcLoc)
if err != nil {
NewtUsage(cmd, err)
}
srcRepo := proj.LocalRepo()
if srcRepoName != "" {
srcRepo = proj.FindRepo(srcRepoName)
}
srcPkg, err := proj.ResolvePackage(srcRepo, srcName)
if err != nil {
NewtUsage(cmd, err)
}
/* Resolve the destination package to a physical location, and then
* move the source package to that location.
* dstLoc is assumed to be in the format "@repo/pkg/loc"
*/
repoName, pkgName, err := newtutil.ParsePackageString(dstLoc)
if err != nil {
NewtUsage(cmd, err)
}
dstPath := proj.Path() + "/"
repo := proj.LocalRepo()
if repoName != "" {
dstPath += "repos/" + repoName + "/"
repo = proj.FindRepo(repoName)
if repo == nil {
NewtUsage(cmd, util.NewNewtError("Destination repo "+
repoName+" does not exist"))
}
}
dstPath += pkgName + "/"
if util.NodeExist(dstPath) {
NewtUsage(cmd, util.NewNewtError("Cannot overwrite existing package, "+
"use pkg delete first"))
}
util.StatusMessage(util.VERBOSITY_DEFAULT, "%s package %s to %s\n",
opStr, srcLoc, dstLoc)
if err := dirOpFn(srcPkg.BasePath(), dstPath); err != nil {
NewtUsage(cmd, err)
}
/* Replace the package name in the pkg.yml file */
pkgData, err := ioutil.ReadFile(dstPath + "/pkg.yml")
if err != nil {
NewtUsage(cmd, err)
}
re := regexp.MustCompile(regexp.QuoteMeta(srcName))
res := re.ReplaceAllString(string(pkgData), pkgName)
if err := ioutil.WriteFile(dstPath+"/pkg.yml", []byte(res), 0666); err != nil {
NewtUsage(cmd, util.ChildNewtError(err))
}
/* If the last element of the package path changes, rename the include
* directory.
*/
if path.Base(pkgName) != path.Base(srcPkg.Name()) {
dirOpFn(dstPath+"/include/"+path.Base(srcPkg.Name()),
dstPath+"/include/"+path.Base(pkgName))
}
}