commit
c1b428a513
@ -0,0 +1,32 @@ |
|||||||
|
# Binaries for programs and plugins |
||||||
|
*.exe |
||||||
|
*.dll |
||||||
|
*.so |
||||||
|
*.dylib |
||||||
|
|
||||||
|
# Test binary, build output |
||||||
|
*.test |
||||||
|
*.out |
||||||
|
|
||||||
|
# Output of the go coverage tool |
||||||
|
*.coverprofile |
||||||
|
|
||||||
|
# Dependency directories (remove the comment below if you use Go modules) |
||||||
|
vendor/ |
||||||
|
|
||||||
|
# Go workspace file |
||||||
|
go.work |
||||||
|
go.work.sum |
||||||
|
|
||||||
|
# IDE/editor files |
||||||
|
.vscode/ |
||||||
|
.idea/ |
||||||
|
*.swp |
||||||
|
*.sublime-workspace |
||||||
|
*.sublime-project |
||||||
|
|
||||||
|
# Logs |
||||||
|
*.log |
||||||
|
|
||||||
|
#binary |
||||||
|
bin/ |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
# GLOB TESTER PARA GITEA |
||||||
|
|
||||||
|
Probar expresiones `glob` de la misma manera que lo hace Gitea |
||||||
|
|
||||||
|
<https://github.com/gobwas/glob> |
||||||
|
|
||||||
|
## Instalar go |
||||||
|
|
||||||
|
<https://go.dev/doc/install> |
||||||
|
|
||||||
|
## Descargar dependencias |
||||||
|
|
||||||
|
```pwsh |
||||||
|
go install |
||||||
|
``` |
||||||
|
|
||||||
|
## Build executable para windows |
||||||
|
|
||||||
|
```pwsh |
||||||
|
go build -o 'bin/test_glob.exe' 'test_glob.go' |
||||||
|
``` |
||||||
|
|
||||||
|
## Usar |
||||||
|
|
||||||
|
```bash |
||||||
|
cd ~/repos/sia-sipa-enlace |
||||||
|
~/repos/go/bin/test_glob.exe "nbproject/**" |
||||||
|
#nbproject/ant-deploy.xml |
||||||
|
#nbproject/build-impl.xml |
||||||
|
#nbproject/genfiles.properties |
||||||
|
#etc... |
||||||
|
``` |
||||||
|
|
||||||
|
## TO-DO |
||||||
|
|
||||||
|
* Ejecutable para linux |
||||||
|
* 2do parámetro para especificar working directory |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
module test_glob |
||||||
|
|
||||||
|
go 1.25.1 |
||||||
|
|
||||||
|
require github.com/gobwas/glob v0.2.3 |
||||||
@ -0,0 +1,2 @@ |
|||||||
|
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= |
||||||
|
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= |
||||||
@ -0,0 +1,83 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"log" |
||||||
|
"os" |
||||||
|
"path/filepath" |
||||||
|
|
||||||
|
"github.com/gobwas/glob" |
||||||
|
) |
||||||
|
|
||||||
|
func main() { |
||||||
|
// Default values
|
||||||
|
var targetDir string |
||||||
|
var pattern string |
||||||
|
|
||||||
|
// Check if running from command line (has arguments)
|
||||||
|
if len(os.Args) > 1 { |
||||||
|
// Command line mode: use current directory and pattern from args
|
||||||
|
targetDir = "." |
||||||
|
pattern = os.Args[1] |
||||||
|
fmt.Printf("Command line mode: searching for pattern '%s' in current directory\n", pattern) |
||||||
|
} else { |
||||||
|
// VS Code/IDE mode: use hardcoded values
|
||||||
|
targetDir = `C:\Users\jalgaba\repos\sia-sipa-enlace` |
||||||
|
pattern = "nbproject/**" |
||||||
|
fmt.Printf("IDE mode: searching for pattern '%s' in %s\n", pattern, targetDir) |
||||||
|
|
||||||
|
// Change to the target directory
|
||||||
|
err := os.Chdir(targetDir) //Change working directory
|
||||||
|
if err != nil { |
||||||
|
log.Fatalf("failed to change directory to %s: %v", targetDir, err) |
||||||
|
} |
||||||
|
targetDir = "." // Now use current directory after chdir
|
||||||
|
} |
||||||
|
|
||||||
|
// Compile the glob pattern
|
||||||
|
compiledPattern, err := glob.Compile(pattern) |
||||||
|
if err != nil { |
||||||
|
log.Fatalf("failed to compile glob pattern '%s': %v", pattern, err) |
||||||
|
} |
||||||
|
|
||||||
|
// Walk the directory tree
|
||||||
|
err = filepath.Walk(targetDir, func(path string, info os.FileInfo, err error) error { |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
|
||||||
|
// Get relative path for pattern matching
|
||||||
|
// We need relative paths because glob patterns like "nbproject/**"
|
||||||
|
// are relative, not absolute paths
|
||||||
|
var relPath string |
||||||
|
if targetDir == "." { |
||||||
|
// When walking from current directory ".", filepath.Walk already
|
||||||
|
// gives us relative paths like "file.txt" or "subfolder/file.txt"
|
||||||
|
relPath = path |
||||||
|
} else { |
||||||
|
// When walking from an absolute path like "/home/user/project",
|
||||||
|
// filepath.Walk gives us absolute paths, so we need to convert
|
||||||
|
// them back to relative paths for pattern matching
|
||||||
|
var err error |
||||||
|
relPath, err = filepath.Rel(targetDir, path) |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Normalize path separators and skip root directory
|
||||||
|
clean := filepath.ToSlash(relPath) |
||||||
|
if clean == "." { |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
// Test against pattern
|
||||||
|
if compiledPattern.Match(clean) { |
||||||
|
fmt.Println(clean) |
||||||
|
} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
if err != nil { |
||||||
|
log.Fatalf("error walking path: %v", err) |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue