|
|
|
// Copyright 2013 gopm authors.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License"): you may
|
|
|
|
// not use this file except in compliance with the License. You may obtain
|
|
|
|
// a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
// License for the specific language governing permissions and limitations
|
|
|
|
// under the License.
|
|
|
|
|
|
|
|
package doc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/Unknwon/com"
|
|
|
|
"github.com/Unknwon/goconfig"
|
|
|
|
|
|
|
|
"github.com/gpmgo/gopm/log"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
GOPM_FILE_NAME = ".gopmfile"
|
|
|
|
GOPM_CONFIG_FILE = "data/gopm.ini"
|
|
|
|
PKG_NAME_LIST_PATH = "data/pkgname.list"
|
|
|
|
VER_PATH = "data/VERSION.json"
|
|
|
|
RawHomeDir = "~/.gopm"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
HomeDir = "~/.gopm"
|
|
|
|
LocalNodesFile = "/data/localnodes.list"
|
|
|
|
LocalNodes *goconfig.ConfigFile
|
|
|
|
Cfg *goconfig.ConfigFile
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
hd, err := com.HomeDir()
|
|
|
|
if err != nil {
|
|
|
|
log.Error("", "Fail to get current user")
|
|
|
|
log.Fatal("", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
HomeDir = strings.Replace(RawHomeDir, "~", hd, -1)
|
|
|
|
|
|
|
|
cfgPath := path.Join(HomeDir, GOPM_CONFIG_FILE)
|
|
|
|
if !com.IsExist(cfgPath) {
|
|
|
|
os.MkdirAll(path.Dir(cfgPath), os.ModePerm)
|
|
|
|
if _, err = os.Create(cfgPath); err != nil {
|
|
|
|
log.Error("", "Fail to create gopm config file")
|
|
|
|
log.Fatal("", err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Cfg, err = goconfig.LoadConfigFile(cfgPath)
|
|
|
|
if _, err = os.Create(cfgPath); err != nil {
|
|
|
|
log.Error("", "Fail to load gopm config file")
|
|
|
|
log.Fatal("", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
LoadLocalNodes()
|
|
|
|
LoadPkgNameList(path.Join(HomeDir, PKG_NAME_LIST_PATH))
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGopmfile loads gopmgile in given directory.
|
|
|
|
func NewGopmfile(dirPath string) *goconfig.ConfigFile {
|
|
|
|
dirPath, _ = filepath.Abs(dirPath)
|
|
|
|
gf, err := goconfig.LoadConfigFile(path.Join(dirPath, GOPM_FILE_NAME))
|
|
|
|
if err != nil {
|
|
|
|
log.Error("", "Fail to load gopmfile:")
|
|
|
|
log.Fatal("", "\t"+err.Error())
|
|
|
|
}
|
|
|
|
return gf
|
|
|
|
}
|
|
|
|
|
|
|
|
var PackageNameList map[string]string
|
|
|
|
|
|
|
|
func LoadPkgNameList(filePath string) {
|
|
|
|
PackageNameList = make(map[string]string)
|
|
|
|
|
|
|
|
// If file does not exist, simply ignore.
|
|
|
|
if !com.IsFile(filePath) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
data, err := com.ReadFile(filePath)
|
|
|
|
if err != nil {
|
|
|
|
log.Error("Package name list", "Fail to read file")
|
|
|
|
log.Fatal("", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
pkgs := strings.Split(string(data), "\n")
|
|
|
|
for i, line := range pkgs {
|
|
|
|
infos := strings.Split(line, "=")
|
|
|
|
if len(infos) != 2 {
|
|
|
|
// Last item might be empty line.
|
|
|
|
if i == len(pkgs)-1 {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
log.Error("", "Fail to parse package name: "+line)
|
|
|
|
log.Fatal("", "Invalid package name information")
|
|
|
|
}
|
|
|
|
PackageNameList[strings.TrimSpace(infos[0])] =
|
|
|
|
strings.TrimSpace(infos[1])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetPkgFullPath(short string) string {
|
|
|
|
name, ok := PackageNameList[short]
|
|
|
|
if !ok {
|
|
|
|
log.Error("", "Invalid package name")
|
|
|
|
log.Error("", "It's not a invalid import path and no match in the package name list:")
|
|
|
|
log.Fatal("", "\t"+short)
|
|
|
|
}
|
|
|
|
return name
|
|
|
|
}
|
|
|
|
|
|
|
|
func LoadLocalNodes() {
|
|
|
|
if !com.IsDir(HomeDir + "/data") {
|
|
|
|
os.MkdirAll(HomeDir+"/data", os.ModePerm)
|
|
|
|
}
|
|
|
|
|
|
|
|
if !com.IsFile(HomeDir + LocalNodesFile) {
|
|
|
|
os.Create(HomeDir + LocalNodesFile)
|
|
|
|
}
|
|
|
|
|
|
|
|
var err error
|
|
|
|
LocalNodes, err = goconfig.LoadConfigFile(path.Join(HomeDir + LocalNodesFile))
|
|
|
|
if err != nil {
|
|
|
|
log.Error("load node", "Fail to load localnodes.list")
|
|
|
|
log.Fatal("", err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func SaveLocalNodes() {
|
|
|
|
if err := goconfig.SaveConfigFile(LocalNodes,
|
|
|
|
path.Join(HomeDir+LocalNodesFile)); err != nil {
|
|
|
|
log.Error("", "Fail to save localnodes.list:")
|
|
|
|
log.Error("", "\t"+err.Error())
|
|
|
|
}
|
|
|
|
}
|