Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restore project flag behavior #465

Merged
merged 3 commits into from
Jan 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions internal/cmd/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,19 @@ func getProject() (*project.Project, error) {
projDir = "."
}

// By default, all commands try to find repo upward.
opts = append(
opts,
project.WithFindRepoUpward(),
project.WithIgnoreFilePatterns(fProjectIgnorePatterns...),
)

// By default, commands try to find repo upward unless project is non-empty.
if fProject == "" {
opts = append(
opts,
project.WithFindRepoUpward(),
)
}

if fRespectGitignore {
opts = append(opts, project.WithRespectGitignore())
}
Expand Down
2 changes: 1 addition & 1 deletion internal/cmd/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func listCmd() *cobra.Command {
block := task.CodeBlock
lines := block.Lines()
relPath, err := filepath.Rel(getCwd(), task.DocumentPath)
if err != nil || !isTerminal(io.Out.Fd()) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@adambabik removing the tty check for consistency. as mentioned, we'll get an absolute path here when the repo’s worktree is assigned from searching upward for .git. in all other cases the path is relative. i thought about fixing it upstream but it seemed ugly having to reconstruct the fs struct with a relative as opposed to an absolute path.

if err != nil {
relPath = task.DocumentPath
}
r := row{
Expand Down
2 changes: 1 addition & 1 deletion internal/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func Root() *cobra.Command {
pflags.StringVar(&fFileName, "filename", "README.md", "Name of the README file")
pflags.BoolVar(&fInsecure, "insecure", false, "Run command in insecure-mode")

pflags.StringVar(&fProject, "project", ".", "Root project to find runnable tasks")
pflags.StringVar(&fProject, "project", "", "Root project to find runnable tasks")
pflags.BoolVar(&fRespectGitignore, "git-ignore", true, "Whether to respect .gitignore file(s) in project")
pflags.StringArrayVar(&fProjectIgnorePatterns, "ignore-pattern", []string{"node_modules", ".venv"}, "Patterns to ignore in project mode")

Expand Down
6 changes: 6 additions & 0 deletions main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ func TestRunme(t *testing.T) {
})
}

func TestRunmeFlags(t *testing.T) {
testscript.Run(t, testscript.Params{
Dir: "testdata/flags",
})
}

func TestRunmeCategories(t *testing.T) {
testscript.Run(t, testscript.Params{
Dir: "testdata/categories",
Expand Down
102 changes: 102 additions & 0 deletions testdata/flags/project.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
cd nested
exec runme ls
cmp stdout ../gitupwards.txt
! stderr .

cd ..
exec runme ls --project nested
cmp stdout projectset.txt
! stderr .

-- .git/config --
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
-- .git/HEAD --
ref: refs/heads/main
-- nested/file.md --
---
runme:
id: 01HFVTDYA775K2HREH9ZGQJ75B
version: 2.0
---

```sh {"name":"echo"}
$ echo "Hello, runme!"
```

It can contain multiple lines too:

```sh {"interactive":"false"}
$ echo "1"
$ echo "2"
$ echo "3"
```
-- root.md --
---
runme:
id: 01HFVTDBE512K2HREH9ZJGQB57
version: 2.0
---

It can even run scripting languages:

```js {"name":"hello-js"}
console.log("Hello, runme, from javascript!")
```

And it can even run a cell with a custom interpreter:

```js {"interpreter":"cat","name":"hello-js-cat"}
console.log("Hello, runme, from javascript!")
```

It works with `cd`, `pushd`, and similar because all lines are executed as a single script:

```sh
temp_dir=$(mktemp -d -t "runme-XXXXXXX")
pushd $temp_dir
echo "hi!" > hi.txt
pwd
cat hi.txt
popd
pwd
```

## Go

It can also execute a snippet of Go code:

```go
package main

import (
"fmt"
)

func main() {
fmt.Println("Hello from Go, runme!")
}
```

## Python

```python {"interpreter":"python3","name":"hello-python"}
def say_hi():
print("Hello from Python")

say_hi()
```
-- gitupwards.txt --
NAME FILE FIRST COMMAND DESCRIPTION NAMED
echo file.md echo "Hello, runme!" Yes
hello-js ../root.md console.log("Hello, runme, from javascript!") It can even run scripting languages. Yes
hello-js-cat ../root.md console.log("Hello, runme, from javascript!") And it can even run a cell with a custom interpreter. Yes
hello-python ../root.md def say_hi(): Yes
-- projectset.txt --
NAME FILE FIRST COMMAND DESCRIPTION NAMED
echo nested/file.md echo "Hello, runme!" Yes