// ALR - Any Linux Repository // Copyright (C) 2025 The ALR Authors // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package alrsh import ( "fmt" "io/fs" "os" "mvdan.cc/sh/v3/syntax" ) type localFs struct{} func (fs *localFs) Open(name string) (fs.File, error) { return os.Open(name) } func ReadFromFS(fsys fs.FS, script string) (*ALRSh, error) { fl, err := fsys.Open(script) if err != nil { return nil, fmt.Errorf("failed to open alr.sh: %w", err) } defer fl.Close() file, err := syntax.NewParser().Parse(fl, "alr.sh") if err != nil { return nil, err } return &ALRSh{ file: file, path: script, }, nil } func ReadFromLocal(script string) (*ALRSh, error) { return ReadFromFS(&localFs{}, script) }