z_mirror/fmm
git clone https://git.raiguard.me/z_mirror/fmm
269870f
predep-parsing
1package main 2 3import ( 4"fmt" 5"path" 6"strings" 7) 8 9func disable (args []string ) { 10if len (args )== 0 { 11disableAll () 12return 13 } 14 15dir ,err := newDir (modsDir ) 16if err != nil { 17abort (err ) 18 } 19defer dir .save () 20 21var mods []Dependency 22for _ ,input := range args { 23mods = append (mods ,Dependency {Ident :newModIdent (input ),Req :VersionAny }) 24 } 25for _ ,mod := range mods { 26file ,entry ,err := dir .Find (mod ) 27if err != nil { 28errorln (err ) 29continue 30 } 31if ! entry .Enabled { 32continue 33 } 34entry .Enabled = false 35fmt .Println ("Disabled" ,file .Ident .Name ) 36 } 37} 38 39func disableAll () { 40list ,err := newModList (path .Join (modsDir ,"mod-list.json" )) 41if err != nil { 42abort (err ) 43 } 44defer list .save () 45 46for i := range list .Mods { 47mod := & list .Mods [i ] 48if mod .Name != "base" { 49mod .Enabled = false 50 } 51 } 52 53fmt .Println ("Disabled all mods" ) 54} 55 56func enable (args []string ) { 57if len (args )== 0 { 58abort ("no mods were provided" ) 59 } 60 61dir ,err := newDir (modsDir ) 62if err != nil { 63abort (err ) 64 } 65defer dir .save () 66 67var mods []Dependency 68for _ ,input := range args { 69mods = append (mods ,Dependency {Ident :newModIdent (input ),Req :VersionEq }) 70 } 71 72i := 0 73for { 74if i > len (mods )- 1 { 75break 76 } 77mod := mods [i ] 78i ++ 79file ,entry ,err := dir .Find (mod ) 80if err != nil { 81errorln (err ) 82continue 83 } 84if entry .Enabled { 85if mod .Ident .Version == nil || mod .Ident .Version .cmp (entry .Version )== VersionEq { 86continue 87 } 88 } 89entry .Enabled = true 90entry .Version = mod .Ident .Version 91fmt .Println ("Enabled" ,file .Ident .toString ()) 92 93deps ,err := file .Dependencies () 94if err != nil { 95errorln (err ) 96 } 97if deps == nil { 98continue 99 } 100 101for _ ,dep := range * deps { 102if dep .Ident .Name != "base" && dep .Kind == DependencyRequired { 103mods = append (mods ,dep ) 104 } 105 } 106 } 107} 108 109func install (args []string ) { 110if len (args )== 0 { 111abort ("no mods were provided" ) 112 } 113 114if downloadUsername == "" { 115abort ("Username not specified" ) 116 } 117if downloadToken == "" { 118abort ("Token not specified" ) 119 } 120 121dir ,err := newDir (modsDir ) 122if err != nil { 123abort (err ) 124 } 125 126var mods []Dependency 127for _ ,input := range args { 128mods = append (mods ,Dependency {Ident :newModIdent (input ),Req :VersionEq }) 129 } 130 131for _ ,mod := range mods { 132// TODO: Do we want to do this? 133if file ,_ ,_ := dir .Find (mod );file != nil { 134fmt .Println (file .Ident .toString (),"is already in the mods directory" ) 135continue 136 } 137 138err := portalDownloadMod (mod ,dir ) 139if err != nil { 140errorln (err ) 141 } 142 } 143} 144 145func sync (files []string ) { 146for _ ,file := range files { 147if strings .HasSuffix (file ,".log" ) { 148if err := parseLogFile (file );err != nil { 149errorln (err ) 150 } 151 } 152 } 153} 154 155func upload (files []string ) { 156if apiKey == "" { 157abort ("API key not specified." ) 158 } 159if len (files )== 0 { 160abort ("no files were provided" ) 161 } 162for _ ,file := range files { 163if err := portalUploadMod (file );err != nil { 164abort ("Upload failed:" ,err ) 165 } 166 } 167}