This repository contains the network service implementation for Mojo.

This repository uses gclient to manage dependencies so to work with it follow
these instructions instead of cloning the repo directly:

0.) Install depot_tools and add them to your PATH: https://www.chromium.org/developers/how-tos/install-depot-tools

1.) Make a directory for monet and add a .gclient file:
```
$ mkdir monet
$ cd monet
$ cat <<EOF > .gclient
solutions = [
{
  u'managed': False,
  u'name': u'src',
  u'url': u'https://github.com/domokit/monet.git',
  u'custom_deps': {},
  u'deps_file': u'DEPS',
  u'safesync_url': u''}
]
target_os = [u'android']
EOF
```

2.) Use gclient to pull down the monet repository and dependencies. This will
create a directory under monet called 'src' containing the main repository.
```
$ gclient sync
```

3.) Install the android SDK.
```
$ cd src
$ ./build/install-android-sdks.sh
```


4.) Build and test using the claude.py helper script
```
$ ./claude.py gn
$ ./claude.py build
$ ./claude.py test
```

5.) Upload patches for review
```
$ git checkout -b my_branch
(make changes)
$ git commit -m "What this patch does"
$ git cl upload
```

6.) Land patches (after you get an LGTM)
```
$ git cl land
```

7.) Upload binary artifacts to Google Cloud storage
```
$ ./claude.py upload
```

The code in //net is the code from https://chromium.googlesource.com/chromium/src/net/
at commit 9249e230ffc9c0ef2f6f269a8d8cd39deba2c4d4 with net_patch.diff applied.
