A small application to manage Lilypond music repositories

Adds clean command

+113
+37
cmd/clean.go
··· 1 + // Copyright © 2016 Jip J. Dekker <jip@dekker.li> 2 + // 3 + // Licensed under the Apache License, Version 2.0 (the "License"); 4 + // you may not use this file except in compliance with the License. 5 + // You may obtain a copy of the License at 6 + // 7 + // http://www.apache.org/licenses/LICENSE-2.0 8 + // 9 + // Unless required by applicable law or agreed to in writing, software 10 + // distributed under the License is distributed on an "AS IS" BASIS, 11 + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 + // See the License for the specific language governing permissions and 13 + // limitations under the License. 14 + 15 + package cmd 16 + 17 + import ( 18 + "github.com/jjdekker/ponder/compiler" 19 + "github.com/spf13/cobra" 20 + ) 21 + 22 + // cleanCommand represents the cleaning command 23 + var cleanCommand = &cobra.Command{ 24 + Use: "clean", 25 + Short: "Remove all ponder generated files.", 26 + Long: `The cleaning command removes all item generated by Ponder according to 27 + the target definition. Items removed by the cleaning command will be removed 28 + from the file system, use with care.`, 29 + Run: func(cmd *cobra.Command, args []string) { 30 + path, opts := getSettings() 31 + compiler.Clean(path, opts) 32 + }, 33 + } 34 + 35 + func init() { 36 + RootCmd.AddCommand(cleanCommand) 37 + }
+76
compiler/clean.go
··· 1 + // Copyright © 2016 Jip J. Dekker <jip@dekker.li> 2 + // 3 + // Licensed under the Apache License, Version 2.0 (the "License"); 4 + // you may not use this file except in compliance with the License. 5 + // You may obtain a copy of the License at 6 + // 7 + // http://www.apache.org/licenses/LICENSE-2.0 8 + // 9 + // Unless required by applicable law or agreed to in writing, software 10 + // distributed under the License is distributed on an "AS IS" BASIS, 11 + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 + // See the License for the specific language governing permissions and 13 + // limitations under the License. 14 + 15 + package compiler 16 + 17 + import ( 18 + "os" 19 + "path/filepath" 20 + 21 + log "github.com/Sirupsen/logrus" 22 + "github.com/jjdekker/ponder/helpers" 23 + "github.com/jjdekker/ponder/settings" 24 + ) 25 + 26 + // Clean removes all files generated by the CompileDir and MakeBook commands. 27 + func Clean(path string, opts *settings.Settings) { 28 + // Find all scores 29 + collector := generateScores() 30 + filepath.Walk(path, compilePath(path, opts, collector)) 31 + 32 + // Remove score files 33 + for i := range scores { 34 + scores[i].GenerateOutputPath(opts) 35 + if helpers.Exists(scores[i].OutputPath) { 36 + if err := os.Remove(scores[i].OutputPath); err != nil { 37 + log.WithFields(log.Fields{ 38 + "error": err, 39 + "score": scores[i], 40 + }).Error("unable to delete file") 41 + } 42 + } 43 + } 44 + 45 + // Remove LaTeX resources 46 + texPath := filepath.Join(opts.OutputDir, opts.Name+".tex") 47 + if helpers.Exists(texPath) { 48 + if err := os.Remove(texPath); err != nil { 49 + log.WithFields(log.Fields{ 50 + "error": err, 51 + "file": texPath, 52 + }).Error("unable to delete file") 53 + } 54 + } 55 + for i := range opts.LatexResources { 56 + path := filepath.Join(opts.OutputDir, filepath.Base(opts.LatexResources[i])) 57 + err := os.RemoveAll(path) 58 + if err != nil { 59 + log.WithFields(log.Fields{ 60 + "error": err, 61 + "resource": path, 62 + }).Error("unable to delete file") 63 + } 64 + } 65 + 66 + // Remove target songbook 67 + songbookPath := filepath.Join(opts.OutputDir, opts.Name+".pdf") 68 + if helpers.Exists(songbookPath) { 69 + if err := os.Remove(songbookPath); err != nil { 70 + log.WithFields(log.Fields{ 71 + "error": err, 72 + "songbook": songbookPath, 73 + }).Error("unable to delete file") 74 + } 75 + } 76 + }