A vibe coded tangled fork which supports pijul.
at master 81 lines 2.1 kB view raw
1package pijul 2 3import ( 4 "bytes" 5 "fmt" 6 "os/exec" 7) 8 9const ( 10 fieldSeparator = "\x1f" // ASCII Unit Separator 11 recordSeparator = "\x1e" // ASCII Record Separator 12) 13 14// runPijulCmd executes a pijul command in the repository directory 15func (p *PijulRepo) runPijulCmd(command string, extraArgs ...string) ([]byte, error) { 16 var args []string 17 args = append(args, command) 18 args = append(args, extraArgs...) 19 20 cmd := exec.Command("pijul", args...) 21 cmd.Dir = p.path 22 23 var stdout, stderr bytes.Buffer 24 cmd.Stdout = &stdout 25 cmd.Stderr = &stderr 26 27 err := cmd.Run() 28 if err != nil { 29 if exitErr, ok := err.(*exec.ExitError); ok { 30 return nil, fmt.Errorf("%w, stderr: %s", exitErr, stderr.String()) 31 } 32 return nil, fmt.Errorf("pijul %s: %w", command, err) 33 } 34 35 return stdout.Bytes(), nil 36} 37 38// runPijulCmdWithStdin executes a pijul command with stdin input 39func (p *PijulRepo) runPijulCmdWithStdin(stdin []byte, command string, extraArgs ...string) ([]byte, error) { 40 var args []string 41 args = append(args, command) 42 args = append(args, extraArgs...) 43 44 cmd := exec.Command("pijul", args...) 45 cmd.Dir = p.path 46 cmd.Stdin = bytes.NewReader(stdin) 47 48 var stdout, stderr bytes.Buffer 49 cmd.Stdout = &stdout 50 cmd.Stderr = &stderr 51 52 err := cmd.Run() 53 if err != nil { 54 if exitErr, ok := err.(*exec.ExitError); ok { 55 return nil, fmt.Errorf("%w, stderr: %s", exitErr, stderr.String()) 56 } 57 return nil, fmt.Errorf("pijul %s: %w", command, err) 58 } 59 60 return stdout.Bytes(), nil 61} 62 63// log runs pijul log with arguments 64func (p *PijulRepo) log(extraArgs ...string) ([]byte, error) { 65 return p.runPijulCmd("log", extraArgs...) 66} 67 68// channelCmd runs pijul channel with arguments 69func (p *PijulRepo) channelCmd(extraArgs ...string) ([]byte, error) { 70 return p.runPijulCmd("channel", extraArgs...) 71} 72 73// diff runs pijul diff with arguments 74func (p *PijulRepo) diff(extraArgs ...string) ([]byte, error) { 75 return p.runPijulCmd("diff", extraArgs...) 76} 77 78// change runs pijul change (show change details) with arguments 79func (p *PijulRepo) change(extraArgs ...string) ([]byte, error) { 80 return p.runPijulCmd("change", extraArgs...) 81}