File: CLI.cpp

package info (click to toggle)
watchman 4.9.0-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,992 kB
  • sloc: cpp: 27,459; python: 6,538; java: 3,404; php: 3,257; ansic: 2,803; javascript: 1,116; makefile: 671; ruby: 364; sh: 124; xml: 102; lisp: 4
file content (59 lines) | stat: -rw-r--r-- 1,584 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* Copyright 2016-present Facebook, Inc.
 * Licensed under the Apache License, Version 2.0 */

/*
  This is a test utility for WatchmanConnection. This works a bit like the
  watchman CLI.

  Build with something like:
  $ LDFLAGS=$(pkg-config watchmanclient --libs) \
      CPPFLAGS=$(pkg-config watchmanclient --cflags) \
      make CLI

  WatchmanConnection is automatically tested via the cppclient test more
  thoroughly.
*/

#include <watchman/WatchmanConnection.h>

#include <iostream>
#include <memory>

#include <folly/init/Init.h>
#include <folly/io/async/ScopedEventBaseThread.h>
#include <folly/json.h>

using namespace folly;
using namespace watchman;

int main(int argc, char** argv) {
  folly::init(&argc, &argv);

  folly::ScopedEventBaseThread sebt;
  auto eb = sebt.getEventBase();

  folly::dynamic cmd = folly::dynamic::array;
  for (int i = 1; i < argc; i++) {
    cmd.push_back(std::string(argv[i]));
  }

  auto c = std::make_shared<WatchmanConnection>(eb);
  c->connect()
      .then([&](folly::dynamic version) {
        std::cout << "Connected to watchman: " << version << std::endl;
        std::cout << "Going to run " << cmd << std::endl;
        return c->run(cmd);
      })
      .then([](folly::dynamic result) { LOG(INFO) << "Result: " << result; })
      .onError([](const folly::exception_wrapper& ex) {
        std::cerr << "Failed: " << ex.what() << std::endl;
      })
      .wait();

  c->run(folly::dynamic::array("watch-list"))
      .then([](folly::dynamic res) { std::cout << res << std::endl; })
      .wait();
  c->close();

  return 0;
}