Add tests and fixes for |None| url values in deps entries.

This is useful for processing purely "local" DEPS files, with a command-line like:
  gclient revinfo --output-json /tmp/out \
    --spec 'solutions=[{"name": ".", "deps_file": "myDEPS", "url": None}]'

This is specifically to fix the "revinfo --output-json" case, but it
also cleans up some errors in the 'flattening' test cases. Note that
None values already work when using 'revinfo' with stdout output, it's
just the json output that complains.

BUG=825063

Change-Id: If5f69ba51cb9d0aa0f2b48a2f9b4ed8706b4c738
Reviewed-on: https://chromium-review.googlesource.com/989022
Commit-Queue: Michael Moss <mmoss@chromium.org>
Reviewed-by: Edward Lesmes <ehmaldonado@chromium.org>
Reviewed-by: Aaron Gable <agable@chromium.org>
diff --git a/gclient.py b/gclient.py
index b5ee7ba..92c477f 100755
--- a/gclient.py
+++ b/gclient.py
@@ -726,7 +726,7 @@
                 deps_file, should_process, use_relative_paths, condition,
                 condition_value))
       else:
-        url = raw_url.format(**self.get_vars())
+        url = raw_url.format(**self.get_vars()) if raw_url else None
         deps_to_add.append(
             Dependency(
                 self, name, raw_url, url, None, None, self.custom_vars, None,
@@ -1883,8 +1883,8 @@
       if self._options.output_json:
         json_output = {
             name: {
-                'url': rev.split('@')[0],
-                'rev': rev.split('@')[1] if '@' in rev else None,
+                'url': rev.split('@')[0] if rev else None,
+                'rev': rev.split('@')[1] if rev and '@' in rev else None,
             }
             for name, rev in entries.iteritems()
         }