godo icon indicating copy to clipboard operation
godo copied to clipboard

get the path of the file that been changed

Open 7belrhalmia opened this issue 10 years ago • 7 comments
trafficstars

hey , i wont to get the path of the file that been changed .

my goal is to auto-install my local package on every change so i have to get the path of the file that been change so i can install it

7belrhalmia avatar Sep 18 '15 16:09 7belrhalmia

Should be part of the context

p.Task("server", nil, func (c *Context) {
    fmt.Println(c.FileEvent.Path)
})

mgutz avatar Sep 18 '15 16:09 mgutz

@mgutz i did'it but i get this error

panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x401432]

goroutine 1 [running]: main.Tasks.func1(0xc8208370e0) /home/belr/Goprogram/Gododir/Godofile.go:22 +0xe2 gopkg.in/godo%2ev1.VoidContextHandlerFunc.Handle(0x5f7048, 0xc8208370e0, 0x0, 0x0) /home/belr/Goprogram/src/gopkg.in/godo.v1/handler.go:38 +0x32 gopkg.in/godo%2ev1.(_Task).RunWithEvent(0xc8200aa540, 0x5a7718, 0x5, 0x0, 0x0, 0x0) /home/belr/Goprogram/src/gopkg.in/godo.v1/task.go:124 +0x4c7 gopkg.in/godo%2ev1.(_Project).run(0xc82000b3a0, 0x5a7718, 0x5, 0x5a7718, 0x5, 0x0, 0x0, 0x0) /home/belr/Goprogram/src/gopkg.in/godo.v1/project.go:120 +0x44a gopkg.in/godo%2ev1.(*Project).Run(0xc82000b3a0, 0x5a7718, 0x5, 0x0, 0x0) /home/belr/Goprogram/src/gopkg.in/godo.v1/project.go:88 +0x54 gopkg.in/godo%2ev1.godo(0x5f7050, 0x0, 0x0, 0x0) /home/belr/Goprogram/src/gopkg.in/godo.v1/runner.go:103 +0xacc gopkg.in/godo%2ev1.Godo(0x5f7050) /home/belr/Goprogram/src/gopkg.in/godo.v1/runner.go:53 +0x32 main.main() /home/belr/Goprogram/Gododir/Godofile.go:27 +0x23

7belrhalmia avatar Sep 18 '15 17:09 7belrhalmia

here is my code :

package main

import ( "fmt"

. "gopkg.in/godo.v1"

)

func Tasks(p *Project) { Env = "GOPATH=$GOPATH" p.Task("default", D{"build"}) p.Task("build", W{"src/ * */ *.go"}, func(c *Context) { fmt.Println(c.FileEvent.Path)

})

} func main() { Godo(Tasks) }

7belrhalmia avatar Sep 18 '15 17:09 7belrhalmia

:( that's not good, i'll take a look later today

mgutz avatar Sep 18 '15 17:09 mgutz

any updates? hitting the same issue with godo v2 (trying to design a task that needs the path in order to run)

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x2de6]

goroutine 8 [running]:
gopkg.in/godo%2ev2.(*Task).RunWithEvent.func1(0xc820233d88, 0xc8203262c0, 0x10)
    /Users/m/dev/go/src/gopkg.in/godo.v2/task.go:175 +0x7a
main.tasks.func6(0xc8202ae540)
    /Users/m/dev/php/app/Gododir/main.go:61 +0x166
gopkg.in/godo%2ev2.HandlerFunc.Handle(0x27a540, 0xc8202ae540)
    /Users/m/dev/go/src/gopkg.in/godo.v2/handler.go:38 +0x26
gopkg.in/godo%2ev2.(*Task).RunWithEvent(0xc8201523c0, 0xc8203262c0, 0x10, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/task.go:181 +0x641
gopkg.in/godo%2ev2.(*Project).run(0xc820012f00, 0x223ee0, 0x8, 0xc8203262c0, 0x10, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:267 +0x3d4
gopkg.in/godo%2ev2.(*Project).runWithEvent(0xc820012f00, 0x223ee0, 0x8, 0xc8203262c0, 0x10, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:162 +0x62
gopkg.in/godo%2ev2.(*Project).runTask(0xc820012f00, 0x223ee0, 0x8, 0x219738, 0x7, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:171 +0x23c
gopkg.in/godo%2ev2.(*Project).runParallel.func1(0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:182 +0x73
gopkg.in/godo%2ev2.GoThrottle.func1(0xc820122a00, 0xc820126c40, 0xc820016e00)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:318 +0x1d
created by gopkg.in/godo%2ev2.GoThrottle
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:326 +0xde

goroutine 1 [chan receive]:
github.com/nozzle/throttler.(*Throttler).Throttle(0xc820126c40, 0x27a4a8)
    /Users/m/dev/go/src/github.com/nozzle/throttler/throttler.go:72 +0x78
gopkg.in/godo%2ev2.GoThrottle(0x3, 0xc820016dc0, 0x6, 0x8, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:330 +0xec
gopkg.in/godo%2ev2.(*Project).runParallel(0xc820012f00, 0xc82001af00, 0x6, 0x6, 0x219738, 0x7, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:202 +0x2f6
gopkg.in/godo%2ev2.(*Project).runSeries(0xc820012f00, 0xc820122990, 0x1, 0x1, 0x219738, 0x7, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:219 +0x647
gopkg.in/godo%2ev2.(*Project).run(0xc820012f00, 0x219738, 0x7, 0x219738, 0x7, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:261 +0x370
gopkg.in/godo%2ev2.(*Project).Run(0xc820012f00, 0x219738, 0x7, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:157 +0x54
gopkg.in/godo%2ev2.godoExit(0x27a548, 0x0, 0x0, 0x0, 0x27a568)
    /Users/m/dev/go/src/gopkg.in/godo.v2/runner.go:151 +0xb13
gopkg.in/godo%2ev2.godo(0x27a548, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/runner.go:93 +0x4b
gopkg.in/godo%2ev2.Godo(0x27a548)
    /Users/m/dev/go/src/gopkg.in/godo.v2/runner.go:89 +0x32
main.main()
    /Users/m/dev/php/app/Gododir/main.go:68 +0x23

goroutine 3 [syscall]:
os/signal.loop()
    /usr/local/Cellar/go/1.5.3/libexec/src/os/signal/signal_unix.go:22 +0x18
created by os/signal.init.1
    /usr/local/Cellar/go/1.5.3/libexec/src/os/signal/signal_unix.go:28 +0x37

goroutine 4 [syscall]:
syscall.Syscall6(0x7, 0x17277, 0xc8201d36a4, 0x0, 0xc8201dab40, 0x0, 0x0, 0x1c0ce0, 0xc82016a0c0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/asm_darwin_amd64.s:41 +0x5
syscall.wait4(0x17277, 0xc8201d36a4, 0x0, 0xc8201dab40, 0x90, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/zsyscall_darwin_amd64.go:34 +0x72
syscall.Wait4(0x17277, 0xc8201d36ec, 0x0, 0xc8201dab40, 0xc820088010, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/syscall_bsd.go:129 +0x55
os.(*Process).wait(0xc820180b00, 0x30, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec_unix.go:22 +0x105
os.(*Process).Wait(0xc820180b00, 0x0, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/doc.go:45 +0x2d
os/exec.(*Cmd).Wait(0xc8201aa140, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec/exec.go:380 +0x211
os/exec.(*Cmd).Run(0xc8201aa140, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec/exec.go:258 +0x64
gopkg.in/godo%2ev2.(*command).run(0xc82027c000, 0x0, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/cmd.go:83 +0x9e
gopkg.in/godo%2ev2.run(0x263b80, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:223 +0x4d0
gopkg.in/godo%2ev2.Run(0x263b80, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:34 +0x6e
gopkg.in/godo%2ev2.(*Context).Run(0xc8201584b0, 0x263b80, 0x37, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/context.go:45 +0x190
main.tasks.func4(0xc8201584b0)
    /Users/m/dev/php/app/Gododir/main.go:52 +0x47
gopkg.in/godo%2ev2.HandlerFunc.Handle(0x27a530, 0xc8201584b0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/handler.go:38 +0x26
gopkg.in/godo%2ev2.(*Task).RunWithEvent(0xc820152140, 0xc820154010, 0xc, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/task.go:181 +0x641
gopkg.in/godo%2ev2.(*Project).run(0xc820012f00, 0x21c0d0, 0x4, 0xc820154010, 0xc, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:267 +0x3d4
gopkg.in/godo%2ev2.(*Project).runWithEvent(0xc820012f00, 0x21c0d0, 0x4, 0xc820154010, 0xc, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:162 +0x62
gopkg.in/godo%2ev2.(*Project).runTask(0xc820012f00, 0x21c0d0, 0x4, 0x219738, 0x7, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:171 +0x23c
gopkg.in/godo%2ev2.(*Project).runParallel.func1(0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:182 +0x73
gopkg.in/godo%2ev2.GoThrottle.func1(0xc820122a00, 0xc820126c40, 0xc820016c80)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:318 +0x1d
created by gopkg.in/godo%2ev2.GoThrottle
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:326 +0xde

goroutine 7 [syscall]:
syscall.Syscall6(0x7, 0x17289, 0xc8200436c4, 0x0, 0xc820322a20, 0x0, 0x0, 0x1c0ce0, 0xc82001b5c0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/asm_darwin_amd64.s:41 +0x5
syscall.wait4(0x17289, 0xc8200436c4, 0x0, 0xc820322a20, 0x90, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/zsyscall_darwin_amd64.go:34 +0x72
syscall.Wait4(0x17289, 0xc82004370c, 0x0, 0xc820322a20, 0xc820088010, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/syscall_bsd.go:129 +0x55
os.(*Process).wait(0xc8203282c0, 0x30, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec_unix.go:22 +0x105
os.(*Process).Wait(0xc8203282c0, 0x0, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/doc.go:45 +0x2d
os/exec.(*Cmd).Wait(0xc820153900, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec/exec.go:380 +0x211
os/exec.(*Cmd).Run(0xc820153900, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec/exec.go:258 +0x64
gopkg.in/godo%2ev2.(*command).run(0xc82010d420, 0x0, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/cmd.go:83 +0x9e
gopkg.in/godo%2ev2.run(0x258d00, 0x27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:223 +0x4d0
gopkg.in/godo%2ev2.Run(0x258d00, 0x27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:34 +0x6e
gopkg.in/godo%2ev2.(*Context).Run(0xc820320660, 0x258d00, 0x27, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/context.go:45 +0x190
main.tasks.func1(0xc820320660)
    /Users/m/dev/php/app/Gododir/main.go:15 +0x47
gopkg.in/godo%2ev2.HandlerFunc.Handle(0x27a518, 0xc820320660)
    /Users/m/dev/go/src/gopkg.in/godo.v2/handler.go:38 +0x26
gopkg.in/godo%2ev2.(*Task).RunWithEvent(0xc8200fbcc0, 0xc82031fd40, 0x11, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/task.go:181 +0x641
gopkg.in/godo%2ev2.(*Project).run(0xc820012f00, 0x2263f0, 0x9, 0xc82031fd40, 0x11, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:267 +0x3d4
gopkg.in/godo%2ev2.(*Project).runWithEvent(0xc820012f00, 0x2263f0, 0x9, 0xc82031fd40, 0x11, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:162 +0x62
gopkg.in/godo%2ev2.(*Project).runTask(0xc820012f00, 0x2263f0, 0x9, 0x219738, 0x7, 0x0, 0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:171 +0x23c
gopkg.in/godo%2ev2.(*Project).runParallel.func1(0x0, 0x0)
    /Users/m/dev/go/src/gopkg.in/godo.v2/project.go:182 +0x73
gopkg.in/godo%2ev2.GoThrottle.func1(0xc820122a00, 0xc820126c40, 0xc820016d80)
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:318 +0x1d
created by gopkg.in/godo%2ev2.GoThrottle
    /Users/m/dev/go/src/gopkg.in/godo.v2/exec.go:326 +0xde

goroutine 33 [syscall]:
syscall.Syscall6(0x7, 0x17276, 0xc820176d44, 0x0, 0xc82020a090, 0x0, 0x0, 0xc81fffc0d2, 0x0, 0xc81fffc0d2)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/asm_darwin_amd64.s:41 +0x5
syscall.wait4(0x17276, 0xc820176d44, 0x0, 0xc82020a090, 0x90, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/zsyscall_darwin_amd64.go:34 +0x72
syscall.Wait4(0x17276, 0xc820176d8c, 0x0, 0xc82020a090, 0xc82007e5b0, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/syscall/syscall_bsd.go:129 +0x55
os.(*Process).wait(0xc8200722e0, 0x11109, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec_unix.go:22 +0x105
os.(*Process).Wait(0xc8200722e0, 0xc82007e638, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/doc.go:45 +0x2d
os/exec.(*Cmd).Wait(0xc8201c2000, 0x0, 0x0)
    /usr/local/Cellar/go/1.5.3/libexec/src/os/exec/exec.go:380 +0x211
gopkg.in/godo%2ev2.(*command).runAsync.func1(0xc82016c200, 0xc8201c2000, 0x25a700, 0x22)
    /Users/m/dev/go/src/gopkg.in/godo.v2/cmd.go:113 +0x2e7
created by gopkg.in/godo%2ev2.(*command).runAsync
    /Users/m/dev/go/src/gopkg.in/godo.v2/cmd.go:115 +0x12f

martinlindhe avatar Feb 12 '16 10:02 martinlindhe

I figured it out

When godo is booting up, the event is triggered once and then c.FileEvent is nil.

When godo has booted, c.FileEvent will not be nil

so the following works for me:

p.Task("lint-php", nil, func(c *do.Context) {
    if c.FileEvent == nil {
        return
    }
    c.Run(fmt.Sprintf("php -l %s", c.FileEvent.Path))
}).Src("app/**/*.{php}")

martinlindhe avatar Feb 12 '16 10:02 martinlindhe

To clarify, the initial task run is programmatic and subsequent runs are react to file watch events.

mgutz avatar Feb 12 '16 17:02 mgutz