// Delete removes an application from a repository func (r LocalRepo) Delete(name string) error { var meta utils.Meta metaFile := r.GetMetaFile() if !utils.IsFileExist(metaFile) { return ErrorEmptyLocalRepo } data, err := ioutil.ReadFile(metaFile) if err != nil { return err } err = json.Unmarshal(data, &meta) if err != nil { //This may happend in migration, meta struct changes. os.Remove(metaFile) return nil } for i := range meta.Items { if meta.Items[i].Name != name { continue } dataFile := filepath.Join(r.GetTopDir(), defaultTargetDir, meta.Items[i].Hash) if err := os.Remove(dataFile); err != nil { return err } meta.Items = append(meta.Items[:i], meta.Items[i+1:]...) if err := r.saveMeta(meta); err != nil { return err } return nil } return ErrorAppNotExist }
// Put adds an application to a repository func (r LocalRepo) Put(name string, content []byte, method utils.EncryptMethod) (string, error) { topDir := r.GetTopDir() if !utils.IsDirExist(topDir) { if err := os.MkdirAll(topDir, 0777); err != nil { return "", err } } var meta utils.Meta metaFile := r.GetMetaFile() if utils.IsFileExist(metaFile) { data, err := ioutil.ReadFile(metaFile) if err != nil { return "", err } err = json.Unmarshal(data, &meta) if err != nil { //This may happend in migration, meta struct changes. os.Remove(metaFile) } } encryptContent, err := r.encrypt(method, content) if err != nil { return "", err } item := utils.GenerateMetaItem(name, encryptContent) item.SetEncryption(method) // Using the 'hash' value to rename the original file dataFileName := item.GetHash() dataFile := filepath.Join(topDir, defaultTargetDir, dataFileName) if !utils.IsDirExist(filepath.Dir(dataFile)) { if err := os.MkdirAll(filepath.Dir(dataFile), 0777); err != nil { return "", err } } // write data if err := ioutil.WriteFile(dataFile, encryptContent, 0644); err != nil { return "", err } // get meta content exist := false for i := range meta.Items { if meta.Items[i].Name == name { meta.Items[i] = item exist = true } } if !exist { meta.Items = append(meta.Items, item) } // write meta data err = r.saveMeta(meta) if err != nil { os.Remove(dataFile) return "", err } return dataFile, nil }