| 203 | |
| 204 | |
| 205 | func activate(st *store.Store, self string, c *doozer.Conn) int64 { |
| 206 | rev, _ := st.Snap() |
| 207 | |
| 208 | for _, base := range store.Getdir(st, calDir) { |
| 209 | p := calDir + "/" + base |
| 210 | v, rev := st.Get(p) |
| 211 | if rev != store.Dir && v[0] == "" { |
| 212 | seqn, err := c.Set(p, rev, []byte(self)) |
| 213 | if err != nil { |
| 214 | log.Println(err) |
| 215 | continue |
| 216 | } |
| 217 | |
| 218 | return seqn |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | for { |
| 223 | ch, err := st.Wait(calGlob, rev+1) |
| 224 | if err != nil { |
| 225 | panic(err) |
| 226 | } |
| 227 | ev, ok := <-ch |
| 228 | if !ok { |
| 229 | panic(os.EOF) |
| 230 | } |
| 231 | rev = ev.Rev |
| 232 | // TODO ev.IsEmpty() |
| 233 | if ev.IsSet() && ev.Body == "" { |
| 234 | seqn, err := c.Set(ev.Path, ev.Rev, []byte(self)) |
| 235 | if err != nil { |
| 236 | log.Println(err) |
| 237 | continue |
| 238 | } |
| 239 | return seqn |
| 240 | } else if ev.IsSet() && ev.Body == self { |
| 241 | return ev.Seqn |
| 242 | } |
| 243 | } |
| 244 | |
| 245 | return 0 |
| 246 | } |
| 247 | |
| 248 | func advanceUntil(cl *doozer.Conn, ver <-chan int64, done int64) { |
| 249 | for <-ver < done { |