You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by pi...@apache.org on 2016/09/19 17:32:49 UTC

[01/50] [abbrv] tinkerpop git commit: CTR: fixed `has(T accessor, Object value, Object... values)` which didn't take into account that `value` can be an array. [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1404 4f705dfd7 -> c1556fe82 (forced update)


CTR: fixed `has(T accessor, Object value, Object... values)` which didn't take into account that `value` can be an array.

Prior this fix we've had this behavior:

```
gremlin> labels = ["software","person"] as String[]
==>software
==>person
gremlin> g.V().hasLabel(labels)
gremlin> g.V().hasLabel("software","person")
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
```

Now it's:

```
gremlin> labels = ["software","person"] as String[]
==>software
==>person
gremlin> g.V().hasLabel(labels)
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
gremlin> g.V().hasLabel("software","person")
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
```


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/dea8e841
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/dea8e841
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/dea8e841

Branch: refs/heads/TINKERPOP-1404
Commit: dea8e84194f619aad7aab3d52f6e0e16974985f2
Parents: 13782aa
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 21:24:09 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 21:24:09 2016 +0200

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java      | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dea8e841/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index e0956c5..1aa5000 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -968,10 +968,21 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     public default GraphTraversal<S, E> has(final T accessor, final Object value, final Object... values) {
-        if (values.length == 0) return has(accessor, value);
-        final Object[] objects = new Object[values.length + 1];
-        objects[0] = value;
-        System.arraycopy(values, 0, objects, 1, values.length);
+        final Object[] objects;
+        if (value instanceof Object[]) {
+            final Object[] arr = (Object[]) value;
+            if (values.length == 0) {
+                objects = arr;
+            } else {
+                objects = new Object[arr.length + values.length];
+                System.arraycopy(arr, 0, objects, 0, arr.length);
+                System.arraycopy(values, 0, objects, arr.length, values.length);
+            }
+        } else {
+            objects = new Object[values.length + 1];
+            objects[0] = value;
+            System.arraycopy(values, 0, objects, 1, values.length);
+        }
         return has(accessor, P.within(objects));
     }
 


[34/50] [abbrv] tinkerpop git commit: tweaked CHANGELOG.

Posted by pi...@apache.org.
tweaked CHANGELOG.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2790dbba
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2790dbba
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2790dbba

Branch: refs/heads/TINKERPOP-1404
Commit: 2790dbbadc9a4b40a59d6975ca29353090abd241
Parents: 8febc4d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 09:59:35 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:59:35 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2790dbba/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 2210ecf..3b1e4b6 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,7 +29,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the predicates.
 * Fixed a naming bug in Gremlin-Python where `P._and` and `P._or` should be `P.and_` and `P.or_`. (*breaking*)
 * `where()` predicate-based steps now support `by()`-modulation.
-* `TraversalRing` returns an null if it does not contain traversals (previously `IdentityTraversal`).
+* `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.


[46/50] [abbrv] tinkerpop git commit: Merge branch 'TINKERPOP-1442' into TINKERPOP-1442-master

Posted by pi...@apache.org.
Merge branch 'TINKERPOP-1442' into TINKERPOP-1442-master


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1e248531
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1e248531
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1e248531

Branch: refs/heads/TINKERPOP-1404
Commit: 1e248531ad2fa0a3a4507ca499214b7a730ec3a8
Parents: 14bca06 75baf01
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 16 07:46:28 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 07:46:28 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../tinkerpop/gremlin/driver/Connection.java    |  2 +-
 .../gremlin/groovy/engine/GremlinExecutor.java  |  2 +-
 .../gremlin/server/op/session/Session.java      | 12 +++++++
 .../server/op/session/SessionOpProcessor.java   |  9 ++++++
 .../server/GremlinDriverIntegrateTest.java      |  2 +-
 .../server/GremlinServerIntegrateTest.java      |  4 +--
 .../GremlinServerSessionIntegrateTest.java      | 33 ++++++++++++++++++++
 8 files changed, 60 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e248531/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e248531/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e248531/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e248531/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e248531/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
----------------------------------------------------------------------


[30/50] [abbrv] tinkerpop git commit: updated the complex filtering in traversal-induced-values.asciidoc with a more simple where().by() clause per @spmallette's request.

Posted by pi...@apache.org.
updated the complex filtering in traversal-induced-values.asciidoc with a more simple where().by() clause per @spmallette's request.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/82a1bc00
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/82a1bc00
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/82a1bc00

Branch: refs/heads/TINKERPOP-1404
Commit: 82a1bc0083a49716f15f168a1929f3ee3eb4a209
Parents: 9ef30f0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 05:35:13 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 .../recipes/traversal-induced-values.asciidoc   | 32 +++++---------------
 1 file changed, 8 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/82a1bc00/docs/src/recipes/traversal-induced-values.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/traversal-induced-values.asciidoc b/docs/src/recipes/traversal-induced-values.asciidoc
index 6adefc7..74402b6 100644
--- a/docs/src/recipes/traversal-induced-values.asciidoc
+++ b/docs/src/recipes/traversal-induced-values.asciidoc
@@ -40,37 +40,21 @@ g.V(marko).out('knows').has('age', gt(marko.value('age'))).values('name')
 
 The downside to this approach is that it takes two separate traversals to answer the question. Ideally, there should
 be a single traversal, that can query "marko" once, determine his `age` and then use that for the value supplied to
-filter the people he knows. In this way the _value_ for the `age` filter is _induced_ from the `Traversal` itself.
+filter the people he knows. In this way the _value_ for the `age` in the `has()`-filter is _induced_ from the `Traversal`
+itself.
 
 [gremlin-groovy,modern]
 ----
-g.V().has('name','marko').as('marko').         <1>
-  out('knows').as('friend').                   <2>
-  filter(select('marko','friend').by('age').   <3>
-         where('friend', gt('marko'))).        <4>
+g.V().has('name','marko').as('marko').      <1>
+  out('knows').as('friend').                <2>
+    where('friend', gt('marko')).by('age'). <3>
   values('name')
 ----
 
 <1> Find the "marko" `Vertex` and label it as "marko".
-<2> Traverse out on the "knows" edges to the adjacent `Vertex` and label it as "person".
-<3> Filter the incoming "person" vertices. It is within this filter, that the traversal induced values are utilized.
-The inner `select` grabs the "marko" vertex and the current "friend". The `by` modulator extracts the "age" from both
-of those vertices which yields a `Map` with two keys, "marko" and "friend", where the value of each is the "age".
-<4> The `Map` produced in the previous step can then be filtered with `where` to only return a result if the "friend"
-age is greater than the "marko" age. If this is successful, then the `filter` step from the previous line will succeed
-and allow the "friend" vertex to pass through.
-
-This traversal could also be written declaratively with `match` step as follows:
-
-[gremlin-groovy,modern]
-----
-g.V().has('name','marko').match(
-    __.as('marko').values('age').as('a'),
-    __.as('marko').out('knows').as('friend'),
-    __.as('friend').values('age').as('b')
-  ).where('b', gt('a')).select('friend').
-  values('name')
-----
+<2> Traverse out on the "knows" edges to the adjacent `Vertex` and label it as "friend".
+<3> Continue to traverser only if Marko's current friend is older than him.
+<4> Get the name of Marko's older friend.
 
 Traversal induced values are not just for filtering. They can also be used when writing the values of the properties
 of one `Vertex` to another:


[15/50] [abbrv] tinkerpop git commit: moved numeric types compat code to statics module

Posted by pi...@apache.org.
moved numeric types compat code to statics module


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c7d3da2f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c7d3da2f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c7d3da2f

Branch: refs/heads/TINKERPOP-1404
Commit: c7d3da2f5eaa2ef3b20dc467bab6e3fe4ecfb5f4
Parents: a1f4497
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 13:44:15 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 13:44:15 2016 -0400

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy |  2 +-
 .../python/TraversalSourceGenerator.groovy      |  2 +-
 .../src/main/jython/gremlin_python/compat.py    | 34 --------------------
 .../gremlin_python/process/graph_traversal.py   |  2 +-
 .../jython/gremlin_python/process/traversal.py  |  2 +-
 .../src/main/jython/gremlin_python/statics.py   | 17 ++++++++++
 .../gremlin_python/structure/io/graphson.py     |  2 +-
 .../driver/test_driver_remote_connection.py     |  2 +-
 .../jython/tests/structure/io/test_graphson.py  |  2 +-
 .../main/jython/tests/structure/test_graph.py   |  2 +-
 10 files changed, 25 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 55f977c..cdca686 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -61,7 +61,7 @@ under the License.
         pythonClass.append("from .traversal import Bytecode\n")
         pythonClass.append("from ..driver.remote_connection import RemoteStrategy\n")
         pythonClass.append("from .. import statics\n")
-        pythonClass.append("from ..compat import long\n\n")
+        pythonClass.append("from ..statics import long\n\n")
 
 //////////////////////////
 // GraphTraversalSource //

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 35e5b2f..d78d804 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -57,7 +57,7 @@ under the License.
         pythonClass.append("import six\n")
         pythonClass.append("from aenum import Enum\n")
         pythonClass.append("from .. import statics\n")
-        pythonClass.append("from ..compat import long\n\n")
+        pythonClass.append("from ..statics import long\n\n")
 
         pythonClass.append("""
 class Traversal(object):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/compat.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/compat.py b/gremlin-python/src/main/jython/gremlin_python/compat.py
deleted file mode 100644
index 8089d85..0000000
--- a/gremlin-python/src/main/jython/gremlin_python/compat.py
+++ /dev/null
@@ -1,34 +0,0 @@
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-'''
-
-from types import FunctionType
-
-import six
-
-
-if six.PY3:
-    class long(int): pass
-    FloatType = float
-    IntType = int
-    LongType = long
-else:
-    long = long
-    from types import FloatType
-    from types import IntType
-    from types import LongType

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index 974e127..35b9b71 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -22,7 +22,7 @@ from .traversal import TraversalStrategies
 from .traversal import Bytecode
 from ..driver.remote_connection import RemoteStrategy
 from .. import statics
-from ..compat import long
+from ..statics import long
 
 class GraphTraversalSource(object):
   def __init__(self, graph, traversal_strategies, bytecode=None):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 338c61b..554b694 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -20,7 +20,7 @@ import abc
 import six
 from aenum import Enum
 from .. import statics
-from ..compat import long
+from ..statics import long
 
 
 class Traversal(object):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/statics.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/statics.py b/gremlin-python/src/main/jython/gremlin_python/statics.py
index 293ff93..c827020 100644
--- a/gremlin-python/src/main/jython/gremlin_python/statics.py
+++ b/gremlin-python/src/main/jython/gremlin_python/statics.py
@@ -16,8 +16,25 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
+
+from types import FunctionType
+
+import six
 from aenum import Enum
 
+
+if six.PY3:
+    class long(int): pass
+    FloatType = float
+    IntType = int
+    LongType = long
+else:
+    long = long
+    from types import FloatType
+    from types import IntType
+    from types import LongType
+
+
 staticMethods = {}
 staticEnums = {}
 default_lambda_language = "gremlin-python"

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
index 3eece23..182a7b2 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
@@ -26,7 +26,7 @@ from aenum import Enum
 import six
 
 from gremlin_python import statics
-from gremlin_python.compat import (
+from gremlin_python.statics import (
     FloatType, FunctionType, IntType, LongType, long)
 from gremlin_python.process.traversal import Binding
 from gremlin_python.process.traversal import Bytecode

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 6ec8183..b0efcf1 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -23,7 +23,7 @@ import unittest
 from unittest import TestCase
 
 from gremlin_python import statics
-from gremlin_python.compat import long
+from gremlin_python.statics import long
 from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
 from gremlin_python.process.traversal import Traverser
 from gremlin_python.structure.graph import Graph

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index fbd8438..675b060 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -25,7 +25,7 @@ from unittest import TestCase
 
 import six
 
-from gremlin_python.compat import long
+from gremlin_python.statics import long
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONReader

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c7d3da2f/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 9e3a681..c619ad2 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -24,7 +24,7 @@ from unittest import TestCase
 
 import six
 
-from gremlin_python.compat import long
+from gremlin_python.statics import long
 from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex


[27/50] [abbrv] tinkerpop git commit: Merge branch 'tp31'

Posted by pi...@apache.org.
Merge branch 'tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/204da4b4
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/204da4b4
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/204da4b4

Branch: refs/heads/TINKERPOP-1404
Commit: 204da4b432f33087df7ce0a70e7f2ed65cc13964
Parents: 8fc60ad 146f36f
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 17:35:35 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 17:35:35 2016 +0200

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc              |  4 ++--
 docs/src/reference/implementations-hadoop.asciidoc        |  2 +-
 docs/src/reference/implementations-tinkergraph.asciidoc   |  2 +-
 docs/src/reference/intro.asciidoc                         |  2 +-
 docs/src/reference/the-traversal.asciidoc                 | 10 +++++-----
 docs/src/upgrade/index.asciidoc                           |  2 +-
 .../tinkerpop/gremlin/process/computer/MapReduce.java     |  2 +-
 .../java/org/apache/tinkerpop/gremlin/driver/Cluster.java |  2 +-
 .../tinkerpop/gremlin/driver/LoadBalancingStrategy.java   |  2 +-
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java  |  2 +-
 .../tinkerpop/gremlin/server/AbstractChannelizer.java     |  2 +-
 .../process/computer/util/ComputerSubmissionHelper.java   |  2 +-
 .../tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java     |  2 +-
 13 files changed, 18 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/204da4b4/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
----------------------------------------------------------------------


[49/50] [abbrv] tinkerpop git commit: Fixed bad merge at 2c5733111b2c60b2e17d7ccd1fd83fff727335d4

Posted by pi...@apache.org.
Fixed bad merge at 2c5733111b2c60b2e17d7ccd1fd83fff727335d4

Somehow, the "windows" profile wasn't removed in that conflict. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/54ed33df
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/54ed33df
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/54ed33df

Branch: refs/heads/TINKERPOP-1404
Commit: 54ed33df5e1cdd6be77bdb67d759ccba26222843
Parents: 4293eb3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 19 10:55:08 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 19 10:55:08 2016 -0400

----------------------------------------------------------------------
 pom.xml | 42 ------------------------------------------
 1 file changed, 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/54ed33df/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 7a4c230..020084b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1159,47 +1159,5 @@ limitations under the License.
             </build>
         </profile>
 
-        <profile>
-            <id>windows</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-                <os>
-                    <family>windows</family>
-                </os>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>wagon-maven-plugin</artifactId>
-                        <version>1.0</version>
-                        <executions>
-                            <execution>
-                                <id>download-hadoop-winutils</id>
-                                <phase>generate-test-resources</phase>
-                                <goals>
-                                    <goal>download-single</goal>
-                                </goals>
-                                <configuration>
-                                    <url>http://public-repo-1.hortonworks.com/</url>
-                                    <fromFile>hdp-win-alpha/winutils.exe</fromFile>
-                                    <toDir>${project.build.directory}/hadoop_home/bin</toDir>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <argLine>-Dlog4j.configuration=${log4j-test.properties}
-                                -Dbuild.dir=${project.build.directory}
-                                -Dhadoop.home.dir=${project.build.directory}/hadoop_home -Dis.testing=true
-                            </argLine>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
     </profiles>
 </project>


[42/50] [abbrv] tinkerpop git commit: Updated changelog.

Posted by pi...@apache.org.
Updated changelog.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5bc1c7be
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5bc1c7be
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5bc1c7be

Branch: refs/heads/TINKERPOP-1404
Commit: 5bc1c7be23f08c907a5f75ab3d88ce280274e76c
Parents: 75b4f20
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 16:06:41 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 16:06:41 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5bc1c7be/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 15e1bb2..b57a2c5 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -32,7 +32,8 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
-* If `empty.result.indicator` is set to an empty string, then no "result line" is printed in the console.
+* Renamed the `empty.result.indicator` preference to `result.indicator.null` in Gremlin Console
+* If `result.indicator.null` is set to an empty string, then no "result line" is printed in Gremlin Console.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
 * New build options for `gremlin-python` where `-DglvPython` is no longer required.
 * Added missing `InetAddress` to GraphSON extension module.


[19/50] [abbrv] tinkerpop git commit: Use an absolute path for `PYTHONPATH`.

Posted by pi...@apache.org.
Use an absolute path for `PYTHONPATH`.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a569ea82
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a569ea82
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a569ea82

Branch: refs/heads/TINKERPOP-1404
Commit: a569ea823e2cc179352f1c76dd2959ac9529ee1c
Parents: 6467063
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Sep 14 22:24:32 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Sep 14 22:24:32 2016 +0200

----------------------------------------------------------------------
 docs/preprocessor/preprocess-file.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a569ea82/docs/preprocessor/preprocess-file.sh
----------------------------------------------------------------------
diff --git a/docs/preprocessor/preprocess-file.sh b/docs/preprocessor/preprocess-file.sh
index 1e54c8e..c7b4f5e 100755
--- a/docs/preprocessor/preprocess-file.sh
+++ b/docs/preprocessor/preprocess-file.sh
@@ -133,7 +133,7 @@ if [ ! ${SKIP} ] && [ $(grep -c '^\[gremlin' ${input}) -gt 0 ]; then
 
   sed 's/\t/    /g' ${input} |
   awk -f ${AWK_SCRIPTS}/prepare.awk |
-  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" -v PYTHONPATH="./gremlin-python/target/classes/Lib" |
+  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" -v PYTHONPATH="${TP_HOME}/gremlin-python/target/classes/Lib" |
   awk -f ${AWK_SCRIPTS}/progressbar.awk -v tpl=${AWK_SCRIPTS}/progressbar.groovy.template |
   HADOOP_GREMLIN_LIBS="${CONSOLE_HOME}/ext/giraph-gremlin/lib:${CONSOLE_HOME}/ext/tinkergraph-gremlin/lib" bin/gremlin.sh |
   ${lb} awk -f ${AWK_SCRIPTS}/ignore.awk   |


[11/50] [abbrv] tinkerpop git commit: Added compatibility support for Python 2/3 in gremlin-python glv

Posted by pi...@apache.org.
Added compatibility support for Python 2/3 in gremlin-python glv


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b61f0d82
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b61f0d82
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b61f0d82

Branch: refs/heads/TINKERPOP-1404
Commit: b61f0d827ee76b2bde3404d143c01a5edadbae18
Parents: cf8f6f7
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 12:20:16 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 12:20:16 2016 -0400

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy |  5 +--
 .../python/TraversalSourceGenerator.groovy      |  5 ++-
 .../src/main/jython/gremlin_python/compat.py    | 34 ++++++++++++++++++++
 .../driver/driver_remote_connection.py          |  2 +-
 .../gremlin_python/driver/remote_connection.py  |  2 +-
 .../gremlin_python/process/graph_traversal.py   |  3 +-
 .../jython/gremlin_python/process/traversal.py  |  6 +++-
 .../gremlin_python/structure/io/graphson.py     | 10 +++---
 .../driver/test_driver_remote_connection.py     | 13 ++++----
 .../jython/tests/structure/io/test_graphson.py  | 16 ++++++---
 .../main/jython/tests/structure/test_graph.py   | 11 ++++---
 11 files changed, 80 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 9187302..55f977c 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -60,7 +60,8 @@ under the License.
         pythonClass.append("from .traversal import TraversalStrategies\n")
         pythonClass.append("from .traversal import Bytecode\n")
         pythonClass.append("from ..driver.remote_connection import RemoteStrategy\n")
-        pythonClass.append("from .. import statics\n\n")
+        pythonClass.append("from .. import statics\n")
+        pythonClass.append("from ..compat import long\n\n")
 
 //////////////////////////
 // GraphTraversalSource //
@@ -128,7 +129,7 @@ under the License.
     if isinstance(index, int):
         return self.range(long(index), long(index + 1))
     elif isinstance(index, slice):
-        return self.range(0L if index.start is None else long(index.start), long(sys.maxint) if index.stop is None else long(index.stop))
+        return self.range(long(0) if index.start is None else long(index.start), long(sys.maxsize) if index.stop is None else long(index.stop))
     else:
         raise TypeError("Index must be int or slice")
   def __getattr__(self, key):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 79a1a4e..35e5b2f 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -57,6 +57,7 @@ under the License.
         pythonClass.append("import six\n")
         pythonClass.append("from aenum import Enum\n")
         pythonClass.append("from .. import statics\n")
+        pythonClass.append("from ..compat import long\n\n")
 
         pythonClass.append("""
 class Traversal(object):
@@ -182,7 +183,9 @@ TRAVERSER
 '''
 
 class Traverser(object):
-    def __init__(self, object, bulk=1L):
+    def __init__(self, object, bulk=None):
+        if bulk is None:
+            bulk = long(1)
         self.object = object
         self.bulk = bulk
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/compat.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/compat.py b/gremlin-python/src/main/jython/gremlin_python/compat.py
new file mode 100644
index 0000000..8089d85
--- /dev/null
+++ b/gremlin-python/src/main/jython/gremlin_python/compat.py
@@ -0,0 +1,34 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+from types import FunctionType
+
+import six
+
+
+if six.PY3:
+    class long(int): pass
+    FloatType = float
+    IntType = int
+    LongType = long
+else:
+    long = long
+    from types import FloatType
+    from types import IntType
+    from types import LongType

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 7aca638..cac5e73 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -174,7 +174,7 @@ class Response:
         if self._closed:
             return
         recv_message = yield self._websocket.read_message()
-        recv_message = json.loads(recv_message)
+        recv_message = json.loads(recv_message.decode('utf-8'))
         status_code = recv_message["status"]["code"]
         aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
index 491fffd..0b84a26 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
@@ -42,7 +42,7 @@ class RemoteConnection(object):
 
     @abc.abstractmethod
     def submit(self, bytecode):
-        print "sending " + bytecode + " to GremlinServer..."
+        print("sending " + bytecode + " to GremlinServer...")
         return RemoteTraversal(iter([]), TraversalSideEffects())
 
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index 96985b7..974e127 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -22,6 +22,7 @@ from .traversal import TraversalStrategies
 from .traversal import Bytecode
 from ..driver.remote_connection import RemoteStrategy
 from .. import statics
+from ..compat import long
 
 class GraphTraversalSource(object):
   def __init__(self, graph, traversal_strategies, bytecode=None):
@@ -91,7 +92,7 @@ class GraphTraversal(Traversal):
     if isinstance(index, int):
         return self.range(long(index), long(index + 1))
     elif isinstance(index, slice):
-        return self.range(0L if index.start is None else long(index.start), long(sys.maxint) if index.stop is None else long(index.stop))
+        return self.range(long(0) if index.start is None else long(index.start), long(sys.maxsize) if index.stop is None else long(index.stop))
     else:
         raise TypeError("Index must be int or slice")
   def __getattr__(self, key):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 0302047..338c61b 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -20,6 +20,8 @@ import abc
 import six
 from aenum import Enum
 from .. import statics
+from ..compat import long
+
 
 class Traversal(object):
     def __init__(self, graph, traversal_strategies, bytecode):
@@ -240,7 +242,9 @@ TRAVERSER
 '''
 
 class Traverser(object):
-    def __init__(self, object, bulk=1L):
+    def __init__(self, object, bulk=None):
+        if bulk is None:
+            bulk = long(1)
         self.object = object
         self.bulk = bulk
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
index fd13ae9..3eece23 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
@@ -22,12 +22,12 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 import json
 from abc import abstractmethod
 from aenum import Enum
-from types import FloatType
-from types import FunctionType
-from types import IntType
-from types import LongType
+
+import six
 
 from gremlin_python import statics
+from gremlin_python.compat import (
+    FloatType, FunctionType, IntType, LongType, long)
 from gremlin_python.process.traversal import Binding
 from gremlin_python.process.traversal import Bytecode
 from gremlin_python.process.traversal import P
@@ -171,7 +171,7 @@ class LambdaSerializer(GraphSONSerializer):
             if not script.strip().startswith("lambda"):
                 script = "lambda " + script
                 dict["script"] = script
-            dict["arguments"] = eval(dict["script"]).func_code.co_argcount
+            dict["arguments"] = six.get_function_code(eval(dict["script"])).co_argcount
         else:
             dict["arguments"] = -1
         return _SymbolHelper.objectify("Lambda", dict)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 7855c74..46e2e1f 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -19,10 +19,12 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
+import pytest
 import unittest
 from unittest import TestCase
 
 from gremlin_python import statics
+from gremlin_python.compat import long
 from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
 from gremlin_python.process.traversal import Traverser
 from gremlin_python.structure.graph import Graph
@@ -34,18 +36,17 @@ class TestDriverRemoteConnection(TestCase):
         statics.load_statics(globals())
         connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
         assert "remoteconnection[ws://localhost:8182/gremlin,g]" == str(connection)
-        #
         g = Graph().traversal().withRemote(connection)
-        #
-        assert 6L == g.V().count().toList()[0]
+
+        assert long(6) == g.V().count().toList()[0]
         #
         assert Vertex(1) == g.V(1).next()
         assert 1 == g.V(1).id().next()
         assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
         assert 1 == len(g.V(1).toList())
         assert isinstance(g.V(1).toList(), list)
-        #
-        results = g.V().repeat(out()).times(2).name.toList()
+        results = g.V().repeat(out()).times(2).name
+        results = results.toList()
         assert 2 == len(results)
         assert "lop" in results
         assert "ripple" in results
@@ -125,7 +126,7 @@ if __name__ == '__main__':
         test = True
         connection.close()
     except:
-        print "GremlinServer is not running and this test case will not execute: " + __file__
+        print("GremlinServer is not running and this test case will not execute: " + __file__)
 
     if test:
         unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index cae1a53..fbd8438 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -23,6 +23,9 @@ import json
 import unittest
 from unittest import TestCase
 
+import six
+
+from gremlin_python.compat import long
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONReader
@@ -43,7 +46,7 @@ class TestGraphSONReader(TestCase):
             "@value": 31
         }))
         assert isinstance(x, long)
-        assert 31L == x
+        assert long(31) == x
         ##
         x = GraphSONReader.readObject(json.dumps({
             "@type": "g:Float",
@@ -73,7 +76,10 @@ class TestGraphSONReader(TestCase):
             """{"@type":"g:Path","@value":{"labels":[["a"],["b","c"],[]],"objects":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":0},"value":"marko","label":"name"}}],"age":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29},"label":"age"}}]}}},{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":3},"label":"software","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":4},"value":"lop","label":"name"}}],"lang":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":5},"value":"java","label":"lang"}}]}}},"lop"]}}"""
         )
         assert isinstance(path, Path)
-        assert "[v[1], v[3], u'lop']" == str(path)
+        if six.PY3:
+            assert "[v[1], v[3], 'lop']" == str(path)
+        else:
+            assert "[v[1], v[3], u'lop']" == str(path)
         assert Vertex(1) == path[0]
         assert Vertex(1) == path["a"]
         assert "lop" == path[2]
@@ -82,9 +88,9 @@ class TestGraphSONReader(TestCase):
 
 class TestGraphSONWriter(TestCase):
     def test_numbers(self):
-        assert """{"@type":"g:Int32","@value":1}""" == GraphSONWriter.writeObject(1)
-        assert """{"@type":"g:Int64","@value":2}""" == GraphSONWriter.writeObject(2L)
-        assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
+        assert {"@type":"g:Int64","@value":2} == json.loads(GraphSONWriter.writeObject(long(2)))
+        assert {"@type":"g:Int32","@value":1} == json.loads(GraphSONWriter.writeObject(1))
+        assert {"@type":"g:Float","@value":3.2} == json.loads(GraphSONWriter.writeObject(3.2))
         assert """true""" == GraphSONWriter.writeObject(True)
 
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b61f0d82/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 72b4b79..63d9a1e 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -19,9 +19,11 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
+import sys
 import unittest
 from unittest import TestCase
 
+from gremlin_python.compat import long
 from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex
@@ -45,14 +47,14 @@ class TestGraph(TestCase):
         assert "phrase" == edge.inV.label
         assert edge.inV != edge.outV
         #
-        vertex_property = VertexProperty(24L, "name", "marko")
+        vertex_property = VertexProperty(long(24), "name", "marko")
         assert "vp[name->marko]" == str(vertex_property)
         assert "name" == vertex_property.label
         assert "name" == vertex_property.key
         assert "marko" == vertex_property.value
-        assert 24L == vertex_property.id
+        assert long(24) == vertex_property.id
         assert isinstance(vertex_property.id, long)
-        assert vertex_property == VertexProperty(24L, "name", "marko")
+        assert vertex_property == VertexProperty(long(24), "name", "marko")
         #
         property = Property("age", 29)
         assert "p[age->29]" == str(property)
@@ -60,7 +62,8 @@ class TestGraph(TestCase):
         assert 29 == property.value
         assert isinstance(property.value, int)
         assert property == Property("age", 29)
-        assert property != Property("age", 29L)
+        if not sys.version_info > (3,):
+            assert property != Property("age", long(29))
         #
         for i in [vertex, edge, vertex_property, property]:
             for j in [vertex, edge, vertex_property, property]:


[12/50] [abbrv] tinkerpop git commit: added the homepage image light box to the graffle so we can reuse it in the future more easily. CTR.

Posted by pi...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9004b4bd/docs/static/images/tinkerpop3.graffle
----------------------------------------------------------------------
diff --git a/docs/static/images/tinkerpop3.graffle b/docs/static/images/tinkerpop3.graffle
index 04307a8..226ddb5 100644
--- a/docs/static/images/tinkerpop3.graffle
+++ b/docs/static/images/tinkerpop3.graffle
@@ -20,11 +20,3962 @@
 	<key>GuidesVisible</key>
 	<string>YES</string>
 	<key>ImageCounter</key>
-	<integer>128</integer>
+	<integer>134</integer>
 	<key>Images</key>
 	<array>
 		<dict>
 			<key>Extension</key>
+			<string>png</string>
+			<key>ID</key>
+			<integer>133</integer>
+			<key>RawData</key>
+			<data>
+			iVBORw0KGgoAAAANSUhEUgAAAlgAAAFtCAYAAADbORRfAAAABGdB
+			TUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAA
+			AOpgAAA6mAAAF3CculE8AAAACXBIWXMAAC4jAAAuIwF4pT92AAAB
+			1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4
+			bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENv
+			cmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6
+			Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMi
+			PgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgog
+			ICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUu
+			Y29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNz
+			aW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZm
+			Ok9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAg
+			ICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+Mjwv
+			dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICA8
+			L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1w
+			bWV0YT4Ki08EsgAAQABJREFUeAHsnQecHVd1/8/b97b3rl31YhVL
+			tlzkDi4Y2wnNQGgBJ6EFSAgEG8I/PUsC/xBiMOA/JAES+0MowaaY
+			jo0BUwzYltwtq3etpO29v33/7+/eN7sraXe9K+2uFPne3Xkzb+bO
+			Lb+ZN+c355x7rllIAYGAQEAgIBAQCAgEBAICM4pAfEZLC4UFBCZC
+			oM4yrJJls6UmyhL2BwQCAgGBgEBAICAQEAgITBWBOktMNWvIFxAI
+			CAQEAgIBgYBAQCAgMBkCr7W4aVG6i/XNtsHqLCt9Siy9DquAQEAg
+			IBAQCAgEBAICAYEpIfAOyxzJ9z5bYu+z++wW+9LIPpkMQwoIBAQC
+			AgGBgMAZikAw3ZyhF/aUdUsaq7X4WdXZIEvC2u3dtOWvrMiq2f4/
+			rl0iV3XBF+uUXaNQcUAgIBAQCAjMOgKBYM06xM+bCmKQpjjLkN1N
+			n99nV0CoPoIe6ypHpTr4zLCnHRrPmMyDw88bZEJHAwIBgYBAQOB5
+			h0AgWM+7Sz4LHY7MfSJXdZZnHfbX0KkPWDZ//WiyMpy5sBlatcvV
+			/lo+RcJCCggEBAICAYGAwBmKQCBYZ+iFnbNuyQwoYqV0i10Oufok
+			dOoit6fffabcGMIB2wfB2u/yBXLlYAgfAYGAQEAgIHDmIhAcjc/c
+			azvbPYuZHNkjcnWz/QUV/sSRqwFLYgBM8l0EPsMZBGO21W61btco
+			+WiFFBAICAQEAgIBgTMYgaDBOoMv7qx1TSZB+VF9DvPfX1uN9dln
+			IVavdPqqAfZ5YiU/KxEpT+JTtsW1R+fWBf8rh0X4CAgEBAICAYEz
+			FoFAsM7YSztLHdMowTqnnZJJ8Brrtf/A0+osfK3ktK5lNDyDCFYM
+			QiXKJQ2WTyJcwcE9DUZYBQQCAgGBgMCZiUAwEZ6Z13V2eiV/q7vT
+			5Opmexf06YfQKZEr74OF5uqo6KEpcugOS1oPlGq7a1S9MxjOTvtC
+			qQGBgEBAICAQEDhNEAgE6zS5EBM2QyY16X9OdYr8rdSem+0TUK1/
+			Q5eVjXZqEBqVyIrFMgpiMTbHJH31rT9I/gPuSO3RWcbkDpsBgYBA
+			QCAgEBA4YxAIJsLT+1IqtpQ3p8nYdgx/mbOmi1zJ3+p9VkJsqzuh
+			VTeitVKS5iqzKJ5hHclhG9C+bLM4dFAe7i55argbB/eG9J5gHkwD
+			EVYBgYBAQCAgcOYiEDRYp/e1TaEtmg/JynHkSiRrbpMIXsKRqw/Y
+			Umq/N02uxJ/cKMGKeNw6+uBMfLvp4sV2YVmRJfG5QqMlZVbU3h2u
+			2cHBfW6vXqgtIBAQCAgEBE4ZAoFgnTLoJ61YxMSTkxiu5B34Oyl9
+			CKPc3KXRyOzvs/PQo/0YcnWx87fyhr94FeSqqRtmhR70o68+3666
+			sNYa+vvc2EE3o7PyeZrl/a/MGQznrgehpoBAQCAgEBAICJwiBALB
+			OkXAT1qtd2SK3JleCEn5kH3QatEmKVI6dGbWU8xeCxlSfe+3F0D1
+			5My+HHIlf6t4BsZKkauG9qStq863T75+g12wrsL6u4dsf9uAG0eI
+			7dAbNaXnsnQE9+DgPusXLlQQEAgIBAQCAqcHAoFgnR7X4ehWvC6t
+			6bnFFkJT5lk+UyUP2oddJk+yZvO6eXKl0YI32/Vorr4HuZoXU3yr
+			lGVmZsRipRmQq9akvXh1pd3ye+vtrMXFNjAwbI3taK8gVJgHnf3Q
+			9WIY/ZulI7gHB/ejr3P4FhAICAQEAgJnLAKzKajPWNBmvWOlI6a0
+			c6hrAUEOZFx7C8ZCzeKnNFvXbSy5+h3q+QbkqjjGSMEU5CoH1VUe
+			6qzmtqS94eKF9taXr7aqslzrH0haigwt7Xi5Q7DyyDekHWol2Vn8
+			FDkh/pWuXUgBgYBAQCAg8DxAYLYE9fMAulnsYqTpSdkFlgU9SdmA
+			875K2f+1P7dqZ7pTwM+ZTTG7C0rkNVciV1/HGFngyBVGP5GmDIyW
+			7R3D9rarltlrrltmRXmZaK6SlsGx4eGUdXXh3U4eOY9BrzwNTBGe
+			odBaZrapobSAQEAgIBAQCAic3ggEgnX6XR85l0eBOze45uH3hIFu
+			CCfzFVCgOrfvbhe+IRqld/K9qKOO16F/+oBdTWF3obnKjw2huYJc
+			5WcQjB0C1dOdsndfd5a99KpFlp0Zt4HBYcMa6JyyeiFa9R2o2iLa
+			J1roW7eXFvvQDHWiXyEFBAICAYGAQEDgzEcgEKzT7RpLi6T0Hqvk
+			c80YSpKBHkvpXZgKX8I6xWTLCbfnZD+iIKI3M0owiQ4rE51T2ixY
+			ALnqJcbVINzplt9ZbdddtoBw7RCuoWGnuZKmSiRrCLJ1pJNMtH6E
+			9fmNA655XuMWCNbJXqtwfkAgIBAQCAj8r0AgEKzT7TLdnyZYmoLG
+			bLHzFvdERSEPhjAZKn2YUYWFLj7VyZoKoyCi73X13UX5FSJX1OHM
+			giJXw71mH/jdNXbVRTU0Dv8q9sksOJJgWIMQrLYefLC4o1BXiUhl
+			uLbLRKgUeY+5L+EjIBAQCAgEBAICZzYCgWCdbtd31P/qPPRT2c64
+			5t3FRVuwy0FbMu18KNAHXNPXOjIzhu1Mo0NRENG/tFJK/gq1LaZ8
+			N1owF9KEVdCSKKU+8Dtr7IUbahxtGho+mlypYi3t3QO2pw8VGybC
+			fueABcGSoTMj7eB+9zTaFbIGBAICAYGAQEDgfzkCgWCdThdQXkuR
+			/1WM4J7en2mIvZ5ARZPleA+t9zN1zQXkH2aJPJ+m3htpvlSX1gNM
+			f5NjG9JxrhKEYnC+9X1dKXvvdSshV/NMcdmTMC6iNBxdR5phdXWj
+			9EKBlcs8Oc7VXfvlnD+c1mAdfVb4FhAICAQEAgIBgTMagUCwTuzy
+			KpxBHAJxDNs4scJGzoriX2lqnJSd43RT3tw2koUa45CWQbRN+Wz/
+			ozsgolQn49wUk9qt0YJKC5klMMteYX18Z9JmuFWsCBLV3j5s77xm
+			hV1z8XzIVdoseCy5cgV4CIaIgyVmlek0X+kQDWattLPJZQsfAYGA
+			QEAgIBAQeB4hMHWh/DwC5Tm66nUzIigaKScz212QnjG+3c9x/sSH
+			11KiUoct4nO5Mw+my02wIyciOBAhtEX6fCkO72/mkNLUr2U05Y7O
+			zUAPhubJJchVORHam9uG7Y2XLrLr5dAO4zrO5yqdPXJwl2ars8fp
+			rdxEz84Hy7em2bqs22X3psz0mWEVEAgIBAQCAgGBMxuBqQvlMxuH
+			6fQuhfdTvnMy11nSHim8gZIfjXfimD4zorNaBfGpdD5MECeRKwbt
+			Wd8Q0T5FsrzJ0NeZsr+zvyDau9diKevkSYRQed9vF1LbJ9OZZXSM
+			V0KuGjuSdv3aKnv5VYsJxTA6WnCiQsUIk8mUNXURxZ0vCU8CI6+x
+			ZnrROdG5p2C/TLDq/3PjdAoaF6oMCAQEAgIBgTMHgSBopnMtZRaU
+			5mrYLuXzX5lK5gFIyo/Z3mi3W6Mb1afyvACXbxS0aMopZtLyeGfw
+			tTiyw6gsCWGJD0FglhZmWwz/pl1tfQYPEqOLQ5OSmOCWoYH6K3L/
+			OYvqE+cZPxxC5Hclgjhs/8a5xTHmFyRzZpnIFRM3r6vNtzdct8KK
+			8rNchPajRgtS8NEJWyMhG4YZVdjViwbLcT+XIzKetoCBDy5x9Ilz
+			982bTj3p9SQ0ijE2d20INQUEAgIBgYDA8w6BE9e2PO+gosORCc+g
+			JlmM5MuBYsXsB+hDfsXWZzDXXeNg8YJ82PlpeQH/3GjVUdIoIVvv
+			aBKEqSzBJcLIdv68cnvHtWusPCduSbhMXixtL2Sb9C60WFe48yd2
+			eJfflSd8w/b3tP8iiBkz2lhCsa5aCBTKPnv79WtsXrmf/mZycpXu
+			EqRKs+L093qFmtgd9M6t2GpI5zL7hwlI30iGGd3wPnLCXpiOJVY3
+			23y0d6tntLZQWEAgIBAQCAgEBI5BIBCsYwCZ9OvZaZKguYwH0B/1
+			pQlLpq2Ecv0pR++DaN3P8gaEepbTdnkBL7PU1LCuswLasNKVDE3R
+			6D3VWlSQbWevKLU3XrjcES5FVyfFY97hPYvW1Lk6PJk4vi5PvFK0
+			7XrK+0BarxSLE9gqrjqw8P3N9etsBRM39+OwHvE3VTJZEs1TRPf2
+			dIgGpx6KRjuaHUmf642akxU0U8e8ls478Xvss+jtJZCqD9L3b1DN
+			42B7Oxh4EjjV6zJT7QvlBAQCAgGBgMDzAoHE86KXs9PJhBPRCv7p
+			tUhM1ocuK2HXQr+utXb7LUL904QDvRvi481S3v9nfBPVM2mB32G1
+			bC2VDRAGkOFiSkGXasrzLBM2dNE5lbbu2YP2dEO3leRmWFtyOAE5
+			SkHnXoxz/Nvo6uctKivqd2Qa/FPIW8w+ivlRUeHVjkR5RtwamLz5
+			pssW24Z1lZj7PKObMsGikP7BpDX0w9BoJ7NCp2iNgqKqA62uCV47
+			pz2zlzxRksZqyJlZP8gk2YPoENvt9VR6PvhkuTbJ9NpjNfaXVsRW
+			+3FYzV4LQ8kBgYBAQCAg8DxC4HhNx/Oo8yfRVZnaIv8qYSiiijNS
+			WrMla1kWfloZBO9sx0frfYz2U5LwF9nRMnFawaFSEaxMi2V04t+E
+			dsxKS4g5CvkpLcq2111BFuiRRvGhyJJ2SCEWpOn6W/Q0tU5zNraO
+			KIp6DhPwKEipolMRtLSEkxt6krZmfr69+NIFlok5UiMGp0quXBdQ
+			YWnanP0DDEUEiaQaJd2Qp1NtLo8nfH6P2zHDH564elOgphi6GRwG
+			7Tdcg0+wXEK7cCijRYP03I+YzGdbBGus2XeGGxWKCwgEBAICAYHn
+			MwKBYE3n6m921EHkQdqfiGBFJcQqiVFVHoNsSYeDhojJkkWOrkbA
+			fw+h/zV8tNY78iNHeZGCyEwVleDXq52De8qSuUT1lL/VgsJMK4NY
+			DUNeRLJkKnzV+vnW3jls0kBRToIWaTLoRXz+tSvmrnT7VI9GOf4F
+			U+GkoHq+1cMEE411ibyR/vDqlVZZmmOD+GFNye/KneU/xKWSjG7s
+			kQ+XCJZ2q1+eTrX7XLP2GY0KFNJG736f3v4SHP6J9QKugTflMttP
+			+spF93sJ3/PdOfXpI+5L+AgIBAQCAgGBgMDMIBAJnJkp7flSijRG
+			IljeiyclELXZiJWsGVG/HONhIURLxjKN0nOwoHiCdPwCovUh9EhF
+			TpslGhJpmkYd0FeIqFBgytkgqWl+Ub7l5XqLpEYU5mbH7cUEAMX8
+			aI0Qm3xGF5L8ZNApe6dztvcxurJcPTqapOZsq3JEDO1VEdqroS6z
+			P7hwsa1ZXuIma3azNivvNJMzK2qsIO2GsoleeYQIj+WKijRo0yx3
+			0ux11OZNj0MQqxp692VI1Vcgp6vAPOn6iY9avgiva5kQZfFJgVxz
+			Jy0/HAwIBAQCAgGBgMBJIBAI1omAl0wTLM6VrU9z9uWxfs0CPhDn
+			O1u002wZnIhDmQjzYYT+EJmLMFb9PXt+gX/W75LLnEZLDvEiJkqx
+			kQCj7GAXBGtxaYFlZRHAnTLl2z6IE/rCmgL7s0tWyp8I3pQmWH4y
+			aBGKOv7kWO9DJLzf5J7/+7TAJQhZrLk/aSUVcbvywlpL4NulYKHp
+			cYk+01Q/qVoaLJVNTFJntnQEkYGFNAsKR5rpeQhFSutAWMvN+J7F
+			wDPb3iisYkxUDbHNKMUfbglYEXnCIesQ0odHWfc9hteQAgIBgYBA
+			QCAgMDsIBIJ1Iri66fYcyYIreWLRjW/PzVeZbflDsw9uMOvk+64O
+			Mwn5eRmWgVyXGU8mK03WvB5B/wM0Tf/P3m3lI0RIky5zisgZXMAN
+			IBQhqCrJdUE/PQliEmZ26sJdcm6Vnb+4yFp6h03+VOyOO1+jhF2J
+			w/ufjXRt2N4OnSihZmnTEnnErhIxezsEbV5lrtNeTcvvaqRglEK0
+			b2AIFkOb3TQ5nmIpRz/70OnNcBJxjKb5uQXdldkPwXOFI7C0guZk
+			LoXYtkL49shASVchW4JxbBLVYm9IAYGAQEAgIBAQmB0EgpA5EVzj
+			oidOQ2MDcIxaiWuoi3jGqmVm/3Sj2W9uMnvrKoQ8bt6HoRlLUXUV
+			ZUCAxI0GbFCnQHrezfIANMFrs5JWwd5qkRUuTMyNINR5RVlHOZ5r
+			wmU5lssv6zWXUyH1yrkcjjXW4f1vnMN7HcTK7CblUd0iYo1ybF+Q
+			Z+euKnMsTpqyE9JeUaTSgMLMk0Q2HZFxnYNOJtIaNHd0Bj58pHw/
+			76LijiXsNoBKpLVWiSLGcS4BuN0QW2nUvsTQgv95MRMisq2GSU2Y
+			Tmqmb3S0J6wDAgGBgEBAICAwgwggjkKaNgIJZ/qSCcyrTEQoENmt
+			vawhU1kJs0sJZflpfI++9zqz9eildhOwoAeRvti7UmXCh5KxPkdC
+			1kESfoDJ8D2I/HMoociRARhPj9PHeA2WCJAiIIwmP0fgavynXnf+
+			QuvsSFlF2uEd5/pBPIwq+PwbNFly/K5kWx5I0nPBiMxeet5iNyJx
+			SOY9dWS6aUxTBuQsz3d1jXmhI0+nQfrjTZTTLXu8/CJXn6MXN1sZ
+			ffo2xPRP+WbEAVMPMudDRAnH5QjtWyC2j7/Z7E1Xm60QZaUVVUd3
+			UW2UNi+kgEBAICAQEAgIzAoCgWCdCKwxN4Fxf1rrk0pIeCPc+yWy
+			QXRYFjNMhPk5EJkLzX7wB2afuBqlCoJ+L15JKyADBYw4hC857YvO
+			gZZ8mjI+JaKihV3eUTwvZrk4uLv9HIqS6tYcgDmZcXuRHN5LY8Si
+			Sloh/lQqN22cexvnfchprzixmCGCLX3Dtqgqy85eXuq0YhqZmO5H
+			VPSU1mqmui3tl7Rpat+ID5YvYWiEYJ2ck7sfKejJ1QqKvhdV1MvQ
+			H0onJwqaWAaeB8G7F3L7+RvMPvUaSO1SHTWm8PFrXSO+RlxykMZz
+			RkgBgYBAQCAgEBCYHQSQ3CFNG4EuhHMmZkLPMAinTglI76G0TsQR
+			De2CAsRYasvxz7re7PLlZv/8M7Nv74QPFRN+AWJwYJiS5JsF4eJv
+			QZoMpTADQrBSdm5+vuUwPY7TXqmeMUlZBlHbzK/Osw9cvtpu/f6z
+			lokdjN2xlHfUkv97JWVKYxOjOhk27UVnzbcy4molIUYn5ns1phEw
+			nBGC5QDhmG+n0JiMxIg4xXC/jxH7PoPoXSmCflIaaXRKIn3z8a1u
+			Ia5Yyr6K5mqJ/K3ghXHOjJ1Fp7ZDWjWi8meYBK8+m23qH6LmBATX
+			sSquQfqa+PLhYuTxbVO9IQUEAgIBgYBAQGCGEQgEazqARgRAxCGV
+			jlKOOI8ktDQoTlyLYLAz0ugMo7mSbe4STFf/Nc/sqw+Z/dnPMSmy
+			bznDD3cnLY4qJgUZgzc4fZbc0J1v1YKCfDRhCTeCED6hvSNJmidp
+			oOLDMbuQKOxXb2+wB3Y2W3lh3JqTSe8N7012GdlkbpEpL9vs7GWl
+			LqhoPxqv6ca9Gql8zIbaoKT2kCI4htGjQW1Io6MIPalS4FHF6VIL
+			ffL50l/G5Pd73m+vJucdUNEiyJVGCSay8DdbBEjb8XG7bpHZ7a/A
+			/20h2aF1Gm2JIs8lDT5Qi9Q0SKdorFInW91uK3wEBAICAYGAQEBg
+			FhAYn2DVOSFvI9OIHK1RmLgZ0Vx9E+cwi4J1TpYnIjJr08K6zq0j
+			wT3ZmbN7TO0RWbgdgnUz8+xJarP0q2UgqVGDAwh4IiqM0AyRDi3i
+			ICmEfRmalne/yOy8BZCse/EVOmy2BG1WKzqm9rS1TsWpaPU6Ly/T
+			4s7sp73Hp8jhvSg/015x+RJ7YH+zNTN1TTZqNViginFFZdGI/sGU
+			ravMdyMHUzKuuSPHlzndPRMWI0Ockr9/4qxTaK08qdKRdxDdIo95
+			FzMM6skkzOYc8lkZtMn2sv9RKNorOeMTwjftzJ7JYAEr4/wdhMN4
+			93rmUGSIQA1aQuGrGp2jmeCipkOiUb4Vo/5hMeLr96ZDSET3GtlO
+			kyRKbBh2Y9P6/c3Ub08gRJicbr+/0+QChWYEBAICAYGpIDARwfJC
+			MCphVAMR7Zmb9dh6Rfqk+ZCwHht925t4hu0fEEtekI7PRGaixXVO
+			9KkW1XUkqmhAGyC5MyJY46AaEa1hCJgIwBWYsr6LA/YnfmJ222P4
+			a0G8StjfBvLK6xLlFhcwgpD9aF8mTJGpcDkTNb/r0hX27z/dYUXE
+			JmhMyvKoxvp4XdLurK0ps8L8LOe/daxGbMIKTv5ABsR0wJHTOsuB
+			3ryAIl/GciXLWVzZgrRmabQmjfxLWgsdYKgjmBCpHpKaWQl5zaRD
+			eyBXH36h2XuvxTqYD5eCXEUYi8xqW5g1aryntllpcYAMo8EqTxOs
+			iDTr2OwmXQqzOloQmUWj+iLzqCegurdGmuuyjP0dROfMxfpU1TsX
+			fQt1BAQCAgGBWUZgHCqQrrFOlIGlB8OMJjHuxbU4gXA0xqcl0Tto
+			fjdFydaSZEH4uW2do3AB8gFScjEA+JTQ8H8Snf0IVE03PEgpipek
+			2fEIXuBq67Nitpv5djvrtFxEMHmKMdFDv46cEp8KQllKC5SOFVxu
+			J6048eQjr/s4TA3pkjJk3lOfW/EFgtOMCHQvUY+uTOTKabPo2YJK
+			s4+80mxNFcqcn5IPdIs5jibLJ3pcXZxrCU4axLw3QryOLtKTCQol
+			fqhdccE8e3hXgz1a32Hl+ZgKiR3hiIfOoW1LqwudeVC+WxOVd0zx
+			U//q2x11O4Y50hvk6riOf4UvWB8TL7cTMgJrqbuThNXo4q/vaG0K
+			alGm49hgFYUiUUtp9bp70Er9O1qrt74AskVsiMgEO3oqWyJVlNiZ
+			JlhRo7SfpX3kfqo7qfvhqCpdyXWuBq/9je7DVu5dH6lfGrzo6qrn
+			R6dj722NnFRo2m6WAtAc4neXYu1/e7Bk9mtb+4CCmr1BWL+2iD3r
+			t6iaFIQ2IYrNWtvRot+h90mTX1ovR/S79Hm7WWtwQUgBgYBAQCAg
+			MG0ERKJ8koZIJOYWu5bP92OkEXnK52AuiwhVLvsVlVzESmuRKj2+
+			RWbkcKzt6LGOmsYX6z4jkeKlnL7J7XqIPIqJroe9RMAQpeph34P4
+			62K7CzOc3Je1dLK0kK+Jc5rYbqItzbSgnXU7QqiZtkuUyoSnso4W
+			XpHg8lqwsS2T+SoSelErOX2SJA2ayovZgXQtGShPhoXAo7SghaW4
+			aJLzdSo4CIokvc3FKf2Pr4FIocG68QeQK/bLBCYLnjCU/5X35UJq
+			TsKIBPyQYmMVZ9vrr1xhj37tUeuEXGVzsuJpufIgKIXSiFG5nOYn
+			K4/aTzRJvCuJhrcQi6sQEf3nkKs/5Jqe5Y5JZCtEBYkuZuTQEOCL
+			qZ9ysHLhKUTRuUsgVwrSGq8RudLdwZX91u+ZvfICtskfaQRV1lGJ
+			Y33U06g7R3jq3tAZ+kyhA1XyRMRtTuPD+5HpBD+JtT/V30dyyFcN
+			UTr6PtTe90CGctGfEUifnEU0rJxWoctkibGdYlGoDgaauiXJOodl
+			yP0W/UuN/+3pN6ffoGKr+ZcaTmDf6KLvSqK5apWnsGqTtuSRluRT
+			32XMHSCPvzJ6rRLpyue39z72atLyT9idbOk2G9s/soUUEAgIBAQC
+			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
+			Irtw9TxbtqjI8gjaKRLitD2nQPqLdChJ86R27D/UZY9tOWIP7myy
+			ba20mWCuZr0szaP9GbePVeTJ4r/XLq7qt8tX19q5qyqsCjIpYpGE
+			VMyE2VDt9Y7tGfb4oRqi+me7UYPRPaDrr6mXNLXSucS3qizogDCe
+			an8rbgPdR7q+kNj7f33Abv/xNisr9k7t3En+JpZydsD+Ab+rf6Qb
+			/o5Vh0IKCAQEAgIBgVlDwD9sT7b4tMWGYlJ2i30Yefg3+Hq4hzvP
+			/lhZBqYKtDF/8uIVdsMVC90T3pl/ToHgH6+rEq4CIo7wbOoqhGRV
+			EFCSQKVjNFk6jgLGaTUuqk3PJ4cp6UTMQpE5R2bAZ3a02rd/u902
+			7h+ARCwEwd1mfVQmBU0OS77ZOflrrTZnAXUnrH2w3bb0ENeoq9Xz
+			E80jB/+wLCKfD0O4UnvsJSsr7fqLl9jShYVu5IEIzlwS2mEAjSPw
+			42jl6pma5eeb6u3LT+3D7jkfDRurwYOQSNosSxvBLzPp4wX5F1t5
+			VgU7UtYw0GAbuzYZkw/7PrISFrnxpZidW6yW6Og3XXK2Xbi2glAg
+			WL4GT16bpXtA2iv5Xj1cX+Xuh+j2lOZKI04LMocYKdjIiNLu04Rc
+			pe9bNJoPPdFgH/7205adx53KP9NX6VepqXDkd3UX5Or1gtENTglz
+			DToowkdAICAQEJhNBMQbZiZpVGH04L6FB3o2j/I+TIdYLwhzECMy
+			gnV3p+yDL1ljL9hQY8MKJikZEEmxmWnFCZciAaskB2cFlnzicKVp
+			hOFYkqXjA5ix5HuzrKzR+epMt/nqcybxwto6++3eX++3//7tXkZ6
+			LbSCxH4TZzI40jtXv9MuW3GZnTX/LJtXOs+ysrPwF8tCSSEz0CCE
+			YhBzYhfzyu2xrfu32n3b7rUf7brXkbL5xfPsYB+dyThi73nhSnvB
+			hfMsP4ewR/hszQXJEnmUz9QQ60c3N9k//ZSRbO2Ftriw3PZ27cG2
+			Z3b+wvX26lWvsbWL19qy6mVWUlBimTCvzIS0WvI/G7DBgUFrbm+2
+			HYd22KO7HrWPPfsxYyZM5tUxq85Yakc6d9sN6yrt95izsLYq/6RJ
+			lq5/HEK9vanStrQUpUcOigOOkqvzGSlYgnl48LTQXDmowC3DniLO
+			1V9943E6gD4T7DvR6kGuBvkNZkKuNrK+3j7KJO2RptmfGj4DAgGB
+			gEBAYBYRmDmCpUZGD/D3QBMSdi8P9kt5wItkZeaj0ehG6Eo7U/fK
+			c2zDOVVEJ5WSC1kws604Ybg8ydIosiFr781z886NDTAZmQnn5ffb
+			eTWHGGFGbCT8uKbUfjoqd+ksyNXh5l77zx88bb/e1mEry5fYtvY9
+			bjj9rVffatdfcL0tr11OYFSmi5liaupsss17Nts9D99jt/32NqfR
+			Wpq31Ha37LaXnldtr7t2hVWUEPdrYHZJliNXmAR7+5N234P77Qu/
+			2IUpbZE1ptBetZm94bw32E2X32TnrzjfqkurwW9qYyz6k/12oOGA
+			/fKpX9otP7vZWo+02YqKWtvR3mqV5b32Ny/fYCsWF58wydJ1j8yD
+			j9XXWIOLfSYF0Ci5Oi9NroYIPOusa6fwnnX3KR/Z2cSc291uN39j
+			I6zUmMsxw1qdyTQdTHTQDqAJfbF9yra6eFfylQwpIBAQCAgEBOYE
+			galJuKk25QEe53J6/zecay6zn2GguBHzVTl70blYvIgRb/04ij+w
+			rcHWVRZbbXW+12RR/pRIylTbcYL51AYtGmGYl9Vvpcwn19qbaz1o
+			LEYDkioyfMyqiQqvofnEVp1S22Wx0bxwRyBXn/jWJnt035CdVVZp
+			2xsP2NvOf5t98c1ftBsvu9GqS6qJAo4mB6E/TAAxLdqW5itaxu6T
+			BjAvGyfw6sV29blX23UrrsOJ/KBtOrCJ8AGL7Td7DmKma7OzF5VZ
+			UUHWjPksHQux08yhPenpH7Jv/mSX/fev9trqimW2r3OPWYHZt970
+			LXvvy95r5yw5xwpzMV2ijTuuP3TU/dHXqI+qJ4FptKywzM5bfp69
+			Yf3vW2ms1L759Hdx5B6yxp5y+9HWnXbR/HLnl5WExJ/IvaS4V72D
+			WbanrYgBAoTD4Luis+djFjx/XqPTXDlypZGCpwm52nWg0/7+249a
+			P5rh8ty4tfhI7UMMaMzEI1IObr+HU/sm9+ITgonqVgopIBAQCAjM
+			GQIzS7DUbAUhFcn6DN7Ll9sjkKzfQ5uVj7JnEL+QeAlCuA/z4E+2
+			H7b1VaVWU5Xn5p7TqSciGHXeTKdjSVYLJKt3hGThnw3Bqszrs4Js
+			HM2mQLBEruTsrSH0d/xgsz2ypw9n+ULb1dRon37Vp+0vX/uXtrBC
+			vmkKQyCtHkKc5GNdicBJSza6iJxE3yOSovyJeMIWQ6puWH+D5Q3m
+			2Tee+g6anmp76lCbtbR02Lql5ZaXQyBv8Nf5M5XUBsXtGqTt33lg
+			j30F0+fZVcvt2aZddtM5f2DfeOs37PKzL7fsTKYoShNF1R31YWx/
+			xtsnsqXzdKwkv8ResO4Ftr5yvd2x6S7IJbHMBivs8T07bMOSaisp
+			yj4BEom/GObBLqbF2d9RIH9x/O0ID8FoxvNHfK4U48pfl5nCbbrl
+			AIGYNibjuO1j0MA/f/txwngo1Ag+jn7E4BA2zUT69nkzflffcz5X
+			n+U3GVJAICAQEAgIzCkCM0+w1HyRLJkL/9n2Mlvh05AseWgpnNRg
+			HySrDE2OYmTdv+OQXTCvzOYpEKk8yEkzKPddeSf6Ifqh2EbSZBUz
+			DUpjdx4EAk1WWrNRlddvRTm95JncRCihGKdTknD3PrjPvrXxkK0s
+			q7WdTUfsjt+/w97xknegCct2xEptFamKSIa+j01Ou4OGRmQjShHx
+			0DkRESnIKbAr1l1htVm19t+P3GUrK2rsMSbhzqERq5aWOOdzFTET
+			WLtyIIYKM/HLTYfs3+/faWsqIVeNO+19L3ifffQPPmrzy+ePECsX
+			PJT8Y4nW2G3149gU4RHlizNoYs2iNXZ57eV2x8Nfskr8ohra8qy3
+			s9POWV7uzLDTG0RB+yFYnX25Vt+lWZ/AhmW9Gy3Yedo4tKv/Mgse
+			ONJtt97zpO1p7HexrhpHwzEkXECGlP055OoL/AYzeNFJMZ3z6A1z
+			LLjhe0AgIBAQCAjMCgKzQ7DU1Ad4qItWfQH/jytsD3tehdRSfW7O
+			wnKRLJyx79sJyar2JMs5vpNhHBnL3jlOSNiIZOWjqSrIHLbDPXkQ
+			A28irGCqHcXDem4NFtor+vosowU/du+ztqxoqe1o3Ge3vuJWe9dL
+			34UEzMAklUSDohGJx5OLqNcSrkpjCVhEPLQWuYo0QSovMyPTLlh5
+			gZXFyuzLm+62VZXL7IEde2xNVaEtIGaWJyBR6Se+Vrtk+nTmqu89
+			aQvzltjO9t32zg3vtI+86SNO45SEAKiNarvyR+0c2/5oW/3Q9nhp
+			JI8zhcVsec1yW1+KJuvXX7PlpRW2aX+DLS7KtaULCqc5PZMnWN1o
+			sOo7MVtz5ddVttr8ojY3kEFtmaBJ4zVzxve5S89HTppcffo7T9nW
+			wz1WxQTOI7Gu5OKu0aSD9o+Qq39xjbiajlwTyNWMX5BQYEAgIBAQ
+			mAICs0ewVLmm0/kZ6xvsCbvEWhABv8s3Dc4fJVm9kKzth+w8zIXz
+			KvNOK58sx7BorEiU5iFkHms70oO2je9VTLOjEWWT+WCJTCjCelfv
+			kH31J9tsb3uZtfbvtzec/Qb7u9f/neVmUlaaXFHNhGkseWrsaLTH
+			tz9uD2550PYc3oPmL0nwzWLnpzSWhLlycSJft3SdNTc023277rfS
+			giW2/ch2u2hFjRXmJVzgz4nIzISNGXMg6l8fIxS/+dMdtu1wnnVY
+			va2rOMc+95b/IEholWtfnFhoqifqhzRxuw/ttoe3PWwPb38YM1cj
+			gUgTVpxXPJJvsna5stIka9XCVZbFVEcyh9YWL7OfHdpuV6+YZ0WF
+			0/E3GyVYuzERrirttGXlzbTX/zxOB3IlzdVezIKf+PZTtuXQUeRK
+			NuUMBpRo3OAnIVd/6S6RXm6CaXDM3Ro2AwIBgYDA3CIwuwRLWixk
+			l9Nm/dYehmT1YDi8zgmEsSQLTdaPIVnnVpbYPHyyUmkz2GRCdq5g
+			ioSrZFgxJsEYQvdAd67VMi+hNFgTEiyncEJlh8/ZZrRXdzx4kPPb
+			Dcuo3fGHd9iyecumRa5ESu7deK+9/Ytvtw/f/2H7xuPfsK/e/1X7
+			7L2ftf3N++3cRec6R/AIF2mLRLJyMnNsadVS+7eN/2bDsTZrasvB
+			/yuTGFlFTsuj/FEfo3OntE73TxHEt+5qs88+sNMW5hdYR0e33fmm
+			O+3CswjsDwnSVD6Rb5na1NzZbLd+81Z71adfZV+6/0v2za3ftC9u
+			+qLd9thttjS21FYuWOlCUujcya6/jkUkclnNMvvhsz+03d3bbbi3
+			3BYWDNuKRcRzoI1q5nP3Tz5YhOfoIyAX5HkNcwvSbAjW5ObfKeF0
+			Epmc5orzRa52H+y0f7nnCdvV2DdWcyVyFSNGmAKJ/jvk6j2uurEh
+			U06i/nBqQCAgEBAICJw4ArNLsNQukSw98Dez/q39GpKF/cpexLej
+			NVkD+GRtOWyrS4sYXUiIAiSji5X43NLxxHs/xTPVBAk7Ga5KcnsZ
+			KZeLA/Swm8dQBMsdOKYsCXYF25R25/sP7rVtTQXW39dpf3vF39ob
+			r3kjp6T/JulfZE5jLKHdce8d9vrPvd7qh+rRnlVZd7Lb3n3Fu+09
+			177HdjTssLd/9+326tWvdnGzRMZEQNwf66qSKps3PM++89j3LSd/
+			vrV3YpZdUW0FBOk80Ujo6p/iailY6g/o35ZGyFX/EXvvxe+1P/7d
+			P/YaNV1kHPId0YJc1bfU26s+8yp77Mhj9i8v+Rdbv3S9/bzp5y5E
+			haYCuueX91iK++CSVZc4h/jnJFlpDIvyiqw0xcjCjd9EM1dtTZ31
+			tmFFlRXkTb1/ugyKzF6Z34Pf3QDkTb5wx1zUOfyqa6/rp3kmt+9p
+			t3+451E73DrofK7SZkHvuJ7D76jf7oBcvcM1T76PYY7BObxSoaqA
+			QEAgIDA+ArNPsFSvyNUoyfqFXQRjSJi8Q0ZIVimj7DS68Gebj9iS
+			gjxbUFPgCIqc3yfTZIzfrZnfK2ErMqVo3wXZfmLAAgTxxFLYB9zU
+			nHuf+sVOK04QXZt4Tre+5lZbUL5ghHRM1NJIwCJj7Tu/+Y698XNv
+			tIU1C21ezjxCH+yzO19zp9386pvtwlUX2o2X3GjLE8vthv+5wd56
+			/lud31NEaqTlEclRMM/bn7id2GPt1kC0+gvm5/gwGYhpxyOmTSb8
+			/Hf1R3rs47/YalWJAusm+Om/vvZfbfm85SP9i9rR1ddl7/j8O+zi
+			movtzj+50y5ec7Fdee6Vdnn15falJ79kZYkyJk5ebt985JtWmlVq
+			l66+lOsfB/OJr7/ui8hnS/37zuZ77EjvHmvqLrH18zJtPvcQirCJ
+			L1EafH9tUQQRkkGhN57br26iqzYz+/VioYERmr/x6W0t9gHIVR+h
+			GCoZLTji0K7fjsjVgP0X5OptrmaRq7qRWStnpjGhlIBAQCAgEBA4
+			IQTmhmCpaceSrEsJOZpBEESZEFM21Ad7KcbcpDhZv9rcaJVE9V5U
+			W4Amw08SfNqQLJqbRSBSaTlETSScj0tO28UB6ONDTx6xR3YwW8lQ
+			i/3R2jfbm6/9I2cC0zmT9ckRCzREOw/ttMs/f7nT8izKXWTPNjxr
+			t1x2i938qpvd6EP5YImIrF++3jr2ddiDWx+0Gy64wZGqiJyonqKC
+			Ios1ZtjPd/6cmksxcQ7aqiWlaKHS2rnx+nFcx8buwKzGyMHHtzTa
+			r58lSn+ywW4860Z75/XvZKJmzfHjk8idGNyXf/Jlu3v73fblP/ky
+			BLVgxDy6onaFLeTvaw99zZk4M/Mz7VtPfstevOLFLuSESpkMp+h4
+			cT6BRglZ8OMtP0Z1WAph67Wzl5WhaUSDNglJ861UJdHWBNc0OjzL
+			aw0+kNlVN9bDTzbY33/3SWJGmFUQ56pJgwXcNzTC8rnqt/84SnMV
+			yNUsX51QfEAgIBAQmDoCPMnnMGkqHWmylD7BSKdhpodWQjGE4Bhs
+			R92Qz1Ye86lp0tpv3r/LOnqY8YNRat4vy+U+9R/45sB9xidXtE4m
+			OpGPTuJePUQoihIIhcI+vuy8l1p+NmEAEPiTJR2Xv5LSt379LTcf
+			8pr8Nba5b7PGitmrL3m1C0Y6lByinjimLa9Ru+mqm+zTv/q0Pbb9
+			MXduRLCkRUrEEnb1uqs8kUh02jMHe2jfgNMSqsXTSWq+mqfI8Fv3
+			tzCZIP5OzBt44/obnfYsKsv1E5wOtR6yt37nrfax6z/m+u+0WhAv
+			kUOla9ZfY1ZpzLG4xUoyS1wb73jgDuvq73LkSlqqiZLIl8pTeuHa
+			F/p5GRMH7Ud7u62ppdeFj5jo3NNpvzAVuVKkf5ldf8zEzZpbUIyq
+			hAjtaXKlEGzRaMHbcWl/l+tD0FydTpcytCUgEBAICDgE5pZgqcqj
+			SdYn2PPHEK3hVII4WZCsbkyCTPdnpcUZ9uXf7LP/+u4WO9TU44Ir
+			svs5yYmqmPVEQybjSI6AQLAOEa9o45GYtQ3vNKtiQuMVF7imRT5S
+			E7UzImAHmg7YZx79DBPMwc+GibmF4DXmdJ5fOd+dGml2nJaIPTXE
+			u0I5Zfc+yryEpCgsgvvCx3K0RcsqlrLVZY83DUFAmLfIqeCE7NST
+			2hdHM6T5FJ8gXIDFWt2kzYrSrhS1P2rfI1segWWZrV201ldCdTqm
+			mFhKVaVV9pZFbzGGQBDEdciKiorsjqfusK37trrj8kWaNKUPr1q0
+			ym5c+kqn4+ltj9seHMMd1pw/2fWatOw5OBi1Tc7sbV399vUf77L/
+			d982y+FFoxANbhsEki4OykLtXk/67SO8oLzXNS2Qqzm4QqGKgEBA
+			ICAwfQTmnmCpjSJZdTKgITc+TqQss9fgOdKdYr5f9ijie6oDoVJV
+			Grf7tzba//36Y7Z5Z6vFoWCKGK43/WkqXVTrjCbHS8Yp0ZErDmrK
+			ll0HmIAviWoG4nDLmltGiNE4p42766k9T7lQDBXZFTaQwiQJv1qe
+			s9xikDelEeKRJhgyzV1ZcqV95amvWFNHk8sjshMRnWqIzA2LiJQh
+			hddAJnMi0jCA1OmRkHcnTeFD/W9r67e9nQxIGGwh6OdltqBygTtz
+			LMHqH+q3+5++301iHU3mfOy100jHqtwq3y5KqM6sdhqxR7c/6spT
+			+6Myx2ua6x+3REleib103UvcfJcWz7Fn97ahZWMkY5rIjXfuqd6n
+			e1nNkzP73vou+/d7Ntv/PLzPykuwnLPfTdwscqXpb+gjv5yb0Vz9
+			rWv3XdCtYBY81Zcw1B8QCAgEBMZF4NQQLDWlDrpQh2wX0brNsIPZ
+			S4njc5BgiSJZMh4Na7RUVRFBLJv77C++9qj94pFDNshktgpsKc3E
+			dEnBuAicxM7x6/fmwW5iXz2zH4KFU7yI0RUrr3A+UxKSI8RonLpF
+			JCLz4I6DO5w2Jicjx2l2pL3Y2bvTa7I4Vxi4lF719PdY41CjPdPw
+			jEn7NZLEoEiKGH/uArRMTAxpqAxbWvsA2jXIHZ/qhyc8xqg27ILD
+			mD/7zS6pvdRKC1GfKaXr02Z7V7s9uP9BcEALN6Dp8Uhjjutrz0CP
+			1XfXG/oZRyR7UhA/3Lge2fuIdQ9Qx3Mk4RmZETVfoQu4mdlpv4Tg
+			trX3pwlWGqR0Wbp241+/56hshg67+iFXmkJJ2Gx6ptH+9GsP2692
+			tzDq088rqBcNujbIL4LhkBiZh+0mNFefdE2Qqf117A0pIBAQCAgE
+			BE5LBE4dwRIcnmSlTG/it9nPETQvZlTURoQrotalpEhWWR7NhFz8
+			6/eftf+5d4c14FsjkqU3f6fNSmeeq1UknBP4i4krjBXU2pbGpLW9
+			z55oot3Jfc6sp6ldlKJRb+7LOB8RaRLp2HoYExlIqJbOVKcVJYqM
+			cK2298hed6bImJaIXNQ31tuz/5+97wCQo7jSfpNndmY257yrlVY5
+			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
+			/KpfY2iHM9crvRxESm1wwPawE6+rDWXn5xBFAsK2YNus2fSM2JrA
+			ErtqIi3CtUItSyuuQ1p7SlnsER+yett/r9hh//34Dls0bbSNQZS1
+			s7XfpnRU2r41/fbUpp1OJFlajrkDOGTOBAX1Oj0aiktUGBiujGHl
+			bSDMJ4COXpE+2SHdIaIdLDhEvCufI5dP6QNqzKXlx0rsqcvZJZMf
+			hPkJCCwqDVI6mqq4FPZ7u/2rD06TuHXSbZM5Bz3f3ex4fHwN74W+
+			Wdg00AENOnqhIUwnh6yEnfg1yc3ajeYmu/haeAp1EPwW4NFwlMwL
+			EZmVVbMblR2PVbLFhai3GPpX8Kz1Tum9kW03DiF1CEfP2+vzZxZx
+			UyWOVl8H3p0creQFV/67RrTLH/h6Xx03iwi9BthuoZxfiXYOdsOF
+			259J2w7EfW/yW+A4G3sMQ66B+2pllencz2nFiLFhgwpUqbRmFek/
+			qm+6z5EhKHZIn7zKqiKhCykQUuBDRIHlzG7jmTmZALTNq4ZZFQ6D
+			9d7BfPA1VieQ0yLif5+485kgmCGd28zfp7gSXNcSV8DauxR/C3mZ
+			JU2GZ15imVtG+HKm9wXwEiZTvlwHcWlqpbGzU1F2J7LpW/daggFb
+			WsLc5yFzWBKO017YXxtY3VcmvMyKjBd9fnJr15vUiRNb415NWhR3
+			ExhB33HPDGiR5ePGzWF1+RKWB8YyI/64z8vctxDgtJhpkTz+l2dQ
+			KM8PykeWLhVEeebZMVM3eglvG6U+T8WfYqYtWjph6l/bprXaYTjQ
+			bl4Vhwy+5wAraJVODczo6p0WBJFED09gazj2k+azlfwGdEj2pJJO
+			lChRyL0ArrsQh8hJB+U2xIyn8fU+DvAzgkVGXDGBLi2M4CIHurQ+
+			BpyugBJqP9+p3cDxkB3FlFcLqRzSPP1l9fL7rfzCKgl6LJGjAI4w
+			PIde+iUaeJxESU4sHTRxzjjVG+CAKVmAQ08Xyu4AC6cwvZHDmZJp
+			AEAabACYIG+ScAdc2w34aPpwH7XvuJD6cQyukTy1LNsYOTUU9g0b
+			XQ1wvCoQgotuuiQqk8kFpJluodcbpwXf93PhvDS1SpcdTZ3P6+lA
+			bX6cSKRxwVnRQi8wlAQsdAI+t7G7znohoHyhy1auTar12F0DWSdw
+			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
+			Ik0cRtnOaoFGK6FJO/fH4yYCPmcClrTLVGK6q

<TRUNCATED>

[32/50] [abbrv] tinkerpop git commit: added two where()-by() examples to the reference documentation.

Posted by pi...@apache.org.
added two where()-by() examples to the reference documentation.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9ef30f0e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9ef30f0e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9ef30f0e

Branch: refs/heads/TINKERPOP-1404
Commit: 9ef30f0e2bc5153b3a76b571db9fc7c3aa151421
Parents: 68ecda4
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Sep 14 15:40:02 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 docs/src/reference/the-traversal.asciidoc | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9ef30f0e/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index f7064fd..e8d40e5 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -2190,6 +2190,18 @@ g.V().where(out('created').count().is(gte(2))).values('name') <3>
 g.V().where(out('knows').where(out('created'))).values('name') <4>
 g.V().where(__.not(out('created'))).where(__.in('knows')).values('name') <5>
 g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
+g.V().as('a').out('knows').as('b').
+  where('a',gt('b')).
+    by('age').
+  select('a','b').
+    by('name') <7>
+g.V().as('a').out('knows').as('b').
+  where('a',gt('b').or(eq('b'))).
+    by('age').
+    by('age').
+    by(__.in('knows').values('age')).
+  select('a','b').
+    by('name') <8>
 ----
 
 <1> What are the names of the people who have created a project?
@@ -2198,6 +2210,8 @@ g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
 <4> What are the names of the people who know someone that has created a project? (This only works in OLTP -- see the `WARNING` below)
 <5> What are the names of the people who have not created anything, but are known by someone?
 <6> The concatenation of `where()`-steps is the same as a single `where()`-step with an and'd clause.
+<7> Marko knows josh and vadas but is only older than vadas.
+<8> Marko is younger than josh, but josh knows someone equal in age to marko (which is marko).
 
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
 of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave


[26/50] [abbrv] tinkerpop git commit: Deleted accidentally added files

Posted by pi...@apache.org.
Deleted accidentally added files


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/146f36f2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/146f36f2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/146f36f2

Branch: refs/heads/TINKERPOP-1404
Commit: 146f36f2fa679f48e520c9f33e833147e407cb74
Parents: 6cdc5a0
Author: Mark Hoekstra <ma...@web-iq.eu>
Authored: Thu Sep 15 16:11:16 2016 +0200
Committer: Mark Hoekstra <ma...@web-iq.eu>
Committed: Thu Sep 15 16:11:16 2016 +0200

----------------------------------------------------------------------
 .../traversal/step/map/VertexProgramStep.java   | 135 -------------------
 .../process/remote/RemoteConnection.java        |  51 -------
 2 files changed, 186 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/146f36f2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
deleted file mode 100644
index d005940..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
-
-import org.apache.tinkerpop.gremlin.process.computer.Computer;
-import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.computer.Memory;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
-import org.apache.tinkerpop.gremlin.process.computer.util.EmptyMemory;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-
-import java.util.NoSuchElementException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
-
-    public static final String ROOT_TRAVERSAL = "gremlin.vertexProgramStep.rootTraversal";
-    public static final String STEP_ID = "gremlin.vertexProgramStep.stepId";
-
-    protected Computer computer = Computer.compute();
-
-    protected boolean first = true;
-
-    public VertexProgramStep(final Traversal.Admin traversal) {
-        super(traversal);
-    }
-
-    @Override
-    protected Traverser.Admin<ComputerResult> processNextStart() throws NoSuchElementException {
-        Future<ComputerResult> future = null;
-        try {
-            if (this.first && this.getPreviousStep() instanceof EmptyStep) {
-                this.first = false;
-                final Graph graph = this.getTraversal().getGraph().get();
-                future = this.getComputer().apply(graph).program(this.generateProgram(graph, EmptyMemory.instance())).submit();
-                final ComputerResult result = future.get();
-                this.processMemorySideEffects(result.memory());
-                return this.getTraversal().getTraverserGenerator().generate(result, this, 1l);
-            } else {
-                final Traverser.Admin<ComputerResult> traverser = this.starts.next();
-                final Graph graph = traverser.get().graph();
-                final Memory memory = traverser.get().memory();
-                future = this.generateComputer(graph).program(this.generateProgram(graph, memory)).submit();
-                final ComputerResult result = future.get();
-                this.processMemorySideEffects(result.memory());
-                return traverser.split(result, this);
-            }
-        } catch (final InterruptedException ie) {
-            // the thread running the traversal took an interruption while waiting on the call the future.get().
-            // the future should then be cancelled with interruption so that the GraphComputer that created
-            // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
-            // cancellation request.
-            if (future != null) future.cancel(true);
-            throw new TraversalInterruptedException();
-        } catch (ExecutionException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public Computer getComputer() {
-        Computer tempComputer = this.computer;
-        if (!this.isEndStep()) {
-            if (null == tempComputer.getPersist())
-                tempComputer = tempComputer.persist(GraphComputer.Persist.EDGES);
-            if (null == tempComputer.getResultGraph())
-                tempComputer = tempComputer.result(GraphComputer.ResultGraph.NEW);
-        }
-        return tempComputer;
-    }
-
-    @Override
-    public void setComputer(final Computer computer) {
-        this.computer = computer;
-    }
-
-    protected boolean previousTraversalVertexProgram() {
-        Step<?, ?> currentStep = this;
-        while (!(currentStep instanceof EmptyStep)) {
-            if (currentStep instanceof TraversalVertexProgramStep)
-                return true;
-            currentStep = currentStep.getPreviousStep();
-        }
-        return false;
-    }
-
-    private void processMemorySideEffects(final Memory memory) {
-        // update the traversal side-effects with the state of the memory after the OLAP job execution
-        final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects();
-        for (final String key : memory.keys()) {
-            if (sideEffects.exists(key)) {
-                // halted traversers should never be propagated through sideEffects
-                assert !key.equals(TraversalVertexProgram.HALTED_TRAVERSERS);
-                sideEffects.set(key, memory.get(key));
-            }
-        }
-    }
-
-    protected boolean isEndStep() {
-        return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/146f36f2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
deleted file mode 100644
index 8506ad7..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.remote;
-
-import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-
-import java.util.Iterator;
-
-/**
- * A simple abstraction of a "connection" to a "server" that is capable of processing a {@link Traversal} and
- * returning results. Results refer to both the {@link Iterator} of results from the submitted {@link Traversal}
- * as well as the side-effects produced by that {@link Traversal}. Those results together are wrapped in a
- * {@link Traversal}.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface RemoteConnection extends AutoCloseable {
-
-    /**
-     * @deprecated As of release 3.2.2, replaced by {@link #submit(Bytecode)}.
-     */
-    @Deprecated
-    public <E> Iterator<Traverser.Admin<E>> submit(final Traversal<?, E> traversal) throws RemoteConnectionException;
-
-    /**
-     * Submits {@link Traversal} {@link Bytecode} to a server and returns a {@link Traversal}.
-     * The {@link Traversal} is an abstraction over two types of results that can be returned as part of the
-     * response from the server: the results of the {@link Traversal} itself and the side-effects that it produced.
-     */
-    public <E> RemoteTraversal<?,E> submit(final Bytecode bytecode) throws RemoteConnectionException;
-}


[09/50] [abbrv] tinkerpop git commit: Updated changelog about -DglvPython

Posted by pi...@apache.org.
Updated changelog about -DglvPython


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2fbeb596
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2fbeb596
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2fbeb596

Branch: refs/heads/TINKERPOP-1404
Commit: 2fbeb596d7fe72bccaf2d5a3e5eac0344882a3b1
Parents: e0d7c90
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 12:01:37 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 12:01:37 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2fbeb596/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 24ed601..ab2f8df 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
+* New build options for `gremlin-python` where `-DglvPython` is no longer required.
 * Added missing `InetAddress` to GraphSON extension module.
 
 [[release-3-2-2]]


[35/50] [abbrv] tinkerpop git commit: Merge branch 'TINKERPOP-1448'

Posted by pi...@apache.org.
Merge branch 'TINKERPOP-1448'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/687ae742
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/687ae742
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/687ae742

Branch: refs/heads/TINKERPOP-1404
Commit: 687ae742d974482881e52c5c05a608d99020383d
Parents: 2790dbb 1c5e698
Author: davebshow <da...@apache.org>
Authored: Thu Sep 15 12:14:54 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Thu Sep 15 12:14:54 2016 -0400

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy    |  5 +++--
 .../gremlin/python/TraversalSourceGenerator.groovy |  5 ++++-
 .../driver/driver_remote_connection.py             |  2 +-
 .../gremlin_python/driver/remote_connection.py     |  2 +-
 .../gremlin_python/process/graph_traversal.py      |  3 ++-
 .../jython/gremlin_python/process/traversal.py     |  6 +++++-
 .../src/main/jython/gremlin_python/statics.py      | 17 +++++++++++++++++
 .../jython/gremlin_python/structure/io/graphson.py | 10 +++++-----
 gremlin-python/src/main/jython/setup.py            | 11 ++++++++++-
 .../tests/driver/test_driver_remote_connection.py  | 12 ++++++------
 .../jython/tests/structure/io/test_graphson.py     | 16 +++++++++++-----
 .../src/main/jython/tests/structure/test_graph.py  | 12 ++++++++----
 12 files changed, 73 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/687ae742/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/687ae742/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/687ae742/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --cc gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index 6f244f5,675b060..99c9a45
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@@ -83,15 -88,11 +89,15 @@@ class TestGraphSONReader(TestCase)
  
  class TestGraphSONWriter(TestCase):
      def test_numbers(self):
-         assert """{"@type":"g:Int32","@value":1}""" == GraphSONWriter.writeObject(1)
-         assert """{"@type":"g:Int64","@value":2}""" == GraphSONWriter.writeObject(2L)
-         assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
+         assert {"@type":"g:Int64","@value":2} == json.loads(GraphSONWriter.writeObject(long(2)))
+         assert {"@type":"g:Int32","@value":1} == json.loads(GraphSONWriter.writeObject(1))
+         assert {"@type":"g:Float","@value":3.2} == json.loads(GraphSONWriter.writeObject(3.2))
          assert """true""" == GraphSONWriter.writeObject(True)
  
 +    def test_P(self):
 +        assert """{"@type":"g:P","@value":{"predicate":"and","value":[{"@type":"g:P","@value":{"predicate":"or","value":[{"@type":"g:P","@value":{"predicate":"lt","value":"b"}},{"@type":"g:P","@value":{"predicate":"gt","value":"c"}}]}},{"@type":"g:P","@value":{"predicate":"neq","value":"d"}}]}}""" == GraphSONWriter.writeObject(
 +            P.lt("b").or_(P.gt("c")).and_(P.neq("d")))
 +
  
  if __name__ == '__main__':
      unittest.main()


[44/50] [abbrv] tinkerpop git commit: Improved session cleanup on client close.

Posted by pi...@apache.org.
Improved session cleanup on client close.

While not a perfect implementation, a long run job blocking a close request from the client will now at least get an attempt at interruption rather thant consuming the thread indefinitely. TINKERPOP-1442


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/75baf01e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/75baf01e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/75baf01e

Branch: refs/heads/TINKERPOP-1404
Commit: 75baf01e83e7db2cfd60850e9facf535cf10d887
Parents: e7e7481
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Sep 13 18:10:09 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 07:29:39 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../tinkerpop/gremlin/driver/Connection.java    |  2 +-
 .../gremlin/groovy/engine/GremlinExecutor.java  |  2 +-
 .../gremlin/server/op/session/Session.java      | 12 +++++++
 .../server/op/session/SessionOpProcessor.java   |  9 ++++++
 .../server/GremlinDriverIntegrateTest.java      |  2 +-
 .../server/GremlinServerIntegrateTest.java      |  4 +--
 .../GremlinServerSessionIntegrateTest.java      | 33 ++++++++++++++++++++
 8 files changed, 60 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4d990ee..a9dae9d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Improved session cleanup when a close is triggered by the client.
 * Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
 * Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
index 22e48fe..220ad42 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Connection.java
@@ -92,7 +92,7 @@ final class Connection {
 
         connectionLabel = String.format("Connection{host=%s}", pool.host);
 
-        if (cluster.isClosing()) throw new IllegalStateException("Cannot open a connection while the cluster after close() is called");
+        if (cluster.isClosing()) throw new IllegalStateException("Cannot open a connection with the cluster after close() is called");
 
         final Bootstrap b = this.cluster.getFactory().createBootstrap();
         try {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
index da12e1e..785442a 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
@@ -312,7 +312,7 @@ public class GremlinExecutor implements AutoCloseable {
                 if (root instanceof InterruptedException) {
                     lifeCycle.getAfterTimeout().orElse(afterTimeout).accept(bindings);
                     evaluationFuture.completeExceptionally(new TimeoutException(
-                            String.format("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of %s ms for request [%s]: %s", scriptEvalTimeOut, script, root.getMessage())));
+                            String.format("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of %s ms or evaluation was otherwise cancelled directly for request [%s]: %s", scriptEvalTimeOut, script, root.getMessage())));
                 } else {
                     lifeCycle.getAfterFailure().orElse(afterFailure).accept(bindings, root);
                     evaluationFuture.completeExceptionally(root);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
index 33b2752..c9bc7c1 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
@@ -38,6 +38,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
@@ -52,6 +53,7 @@ public class Session {
     private final ScheduledExecutorService scheduledExecutorService;
     private final long configuredSessionTimeout;
 
+    private AtomicBoolean killing = new AtomicBoolean(false);
     private AtomicReference<ScheduledFuture> kill = new AtomicReference<>();
 
     /**
@@ -104,6 +106,10 @@ public class Session {
         return session;
     }
 
+    public boolean acceptingRequests() {
+        return !killing.get();
+    }
+
     public void touch() {
         // if the task of killing is cancelled successfully then reset the session monitor. otherwise this session
         // has already been killed and there's nothing left to do with this session.
@@ -134,6 +140,8 @@ public class Session {
      * Kills the session and rollback any uncommitted changes on transactional graphs.
      */
     public synchronized void kill() {
+        killing.set(true);
+
         // if the session has already been removed then there's no need to do this process again.  it's possible that
         // the manuallKill and the kill future could have both called kill at roughly the same time. this prevents
         // kill() from being called more than once
@@ -157,6 +165,10 @@ public class Session {
                 }
             }
         });
+
+        // prevent any additional requests from processing now that the mass rollback has been completed
+        executor.shutdownNow();
+
         sessions.remove(session);
         logger.info("Session {} closed", session);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
index 3497169..bec0c55 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
@@ -147,6 +147,15 @@ public class SessionOpProcessor extends AbstractEvalOpProcessor {
         final RequestMessage msg = context.getRequestMessage();
         final Session session = getSession(context, msg);
 
+        // check if the session is still accepting requests - if not block further requests
+        if (!session.acceptingRequests()) {
+            final String sessionClosedMessage = String.format("Session %s is no longer accepting requests as it has been closed",
+                    session.getSessionId());
+            final ResponseMessage response = ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR)
+                    .statusMessage(sessionClosedMessage).create();
+            throw new OpProcessorException(sessionClosedMessage, response);
+        }
+
         // place the session on the channel context so that it can be used during serialization.  in this way
         // the serialization can occur on the same thread used to execute the gremlin within the session.  this
         // is important given the threadlocal nature of Graph implementation transactions.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
index 7314243..1a04b6b 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
@@ -1258,7 +1258,7 @@ public class GremlinDriverIntegrateTest extends AbstractGremlinServerIntegration
         {
             final Throwable root = ExceptionUtils.getRootCause(ex);
             assertThat(root, instanceOf(ResponseException.class));
-            assertThat(root.getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 250 ms for request"));
+            assertThat(root.getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 250 ms"));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
index 2f091d9..0f0cdae 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java
@@ -543,7 +543,7 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration
     public void shouldReceiveFailureTimeOutOnScriptEval() throws Exception {
         try (SimpleClient client = new WebSocketClient()){
             final List<ResponseMessage> responses = client.submit("Thread.sleep(3000);'some-stuff-that-should not return'");
-            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 200 ms for request"));
+            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 200 ms"));
 
             // validate that we can still send messages to the server
             assertEquals(2, ((List<Integer>) client.submit("1+1").get(0).getResult().getData()).get(0).intValue());
@@ -559,7 +559,7 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration
                     .addArg(Tokens.ARGS_GREMLIN, "Thread.sleep(3000);'some-stuff-that-should not return'")
                     .create();
             final List<ResponseMessage> responses = client.submit(msg);
-            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 100 ms for request"));
+            assertThat(responses.get(0).getStatus().getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 100 ms"));
 
             // validate that we can still send messages to the server
             assertEquals(2, ((List<Integer>) client.submit("1+1").get(0).getResult().getData()).get(0).intValue());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75baf01e/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
index 8b34038..99b3a1b 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
@@ -50,6 +50,7 @@ import java.util.stream.IntStream;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.core.StringStartsWith.startsWith;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
@@ -109,6 +110,38 @@ public class GremlinServerSessionIntegrateTest  extends AbstractGremlinServerInt
     }
 
     @Test
+    public void shouldBlockAdditionalRequestsDuringClose() throws Exception {
+        // this is sorta cobbled together a bit given limits/rules about how you can use Cluster/Client instances.
+        // basically, we need one to submit the long run job and one to do the close operation that will cancel the
+        // long run job. it is probably possible to do this with some low-level message manipulation but that's
+        // probably not necessary
+        final Cluster cluster1 = Cluster.build().create();
+        final Client client1 = cluster1.connect(name.getMethodName());
+        client1.submit("1+1").all().join();
+        final Cluster cluster2 = Cluster.build().create();
+        final Client client2 = cluster2.connect(name.getMethodName());
+        client2.submit("1+1").all().join();
+
+        final ResultSet rs = client1.submit("Thread.sleep(10000);1+1");
+
+        client2.close();
+
+        try {
+            rs.all().join();
+            fail("The close of the session on client2 should have interrupted the script sent on client1");
+        } catch (Exception ex) {
+            final Throwable root = ExceptionUtils.getRootCause(ex);
+            assertThat(root.getMessage(), startsWith("Script evaluation exceeded the configured 'scriptEvaluationTimeout' threshold of 30000 ms or evaluation was otherwise cancelled directly for request"));
+        }
+
+        client1.close();
+
+        cluster1.close();
+        cluster2.close();
+    }
+
+
+    @Test
     public void shouldRollbackOnEvalExceptionForManagedTransaction() throws Exception {
         assumeNeo4jIsPresent();
 


[31/50] [abbrv] tinkerpop git commit: forgot a <4> marking.

Posted by pi...@apache.org.
forgot a <4> marking.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/fe21ce16
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/fe21ce16
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/fe21ce16

Branch: refs/heads/TINKERPOP-1404
Commit: fe21ce16062b0c03813994d7eb82a5071d463477
Parents: 82a1bc0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 05:46:12 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 docs/src/recipes/traversal-induced-values.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fe21ce16/docs/src/recipes/traversal-induced-values.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/traversal-induced-values.asciidoc b/docs/src/recipes/traversal-induced-values.asciidoc
index 74402b6..5f48591 100644
--- a/docs/src/recipes/traversal-induced-values.asciidoc
+++ b/docs/src/recipes/traversal-induced-values.asciidoc
@@ -48,7 +48,7 @@ itself.
 g.V().has('name','marko').as('marko').      <1>
   out('knows').as('friend').                <2>
     where('friend', gt('marko')).by('age'). <3>
-  values('name')
+  values('name')                            <4>
 ----
 
 <1> Find the "marko" `Vertex` and label it as "marko".


[39/50] [abbrv] tinkerpop git commit: Improved thread safety when building the method cache in JavaTranslator

Posted by pi...@apache.org.
Improved thread safety when building the method cache in JavaTranslator


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c47217d2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c47217d2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c47217d2

Branch: refs/heads/TINKERPOP-1404
Commit: c47217d26336ff68dc8dbb9a028664cb80bdaf42
Parents: 1fc52cb
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 15:42:12 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 15:42:12 2016 -0400

----------------------------------------------------------------------
 .../gremlin/jsr223/JavaTranslator.java          | 34 ++++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c47217d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index ed2def2..5d3e82d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -102,25 +102,9 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
     }
 
     private Object invokeMethod(final Object delegate, final Class returnType, final String methodName, final Object... arguments) {
-        //////////////////////////
-        //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
         final Map<String, List<Method>> methodCache = GLOBAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
-        if (methodCache.isEmpty()) {
-            for (final Method method : delegate.getClass().getMethods()) {
-                if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
-                    List<Method> list = methodCache.get(method.getName());
-                    if (null == list) {
-                        list = new ArrayList<>();
-                        methodCache.put(method.getName(), list);
-                    }
-                    list.add(method);
-                }
-            }
-            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
-        }
-        //////////////////////////
-        //////////////////////////
+        if (methodCache.isEmpty()) buildMethodCache(delegate, methodCache);
 
         // create a copy of the argument array so as not to mutate the original bytecode
         final Object[] argumentsCopy = new Object[arguments.length];
@@ -179,4 +163,20 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
         }
         throw new IllegalStateException("Could not locate method: " + delegate.getClass().getSimpleName() + "." + methodName + "(" + Arrays.toString(argumentsCopy) + ")");
     }
+
+    private synchronized static void buildMethodCache(final Object delegate, final Map<String, List<Method>> methodCache) {
+        if (methodCache.isEmpty()) {
+            for (final Method method : delegate.getClass().getMethods()) {
+                if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
+                    List<Method> list = methodCache.get(method.getName());
+                    if (null == list) {
+                        list = new ArrayList<>();
+                        methodCache.put(method.getName(), list);
+                    }
+                    list.add(method);
+                }
+            }
+            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
+        }
+    }
 }


[17/50] [abbrv] tinkerpop git commit: Udpated dev docs related to release given changes to gremlin-python build

Posted by pi...@apache.org.
Udpated dev docs related to release given changes to gremlin-python build


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/079cc20d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/079cc20d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/079cc20d

Branch: refs/heads/TINKERPOP-1404
Commit: 079cc20d9604c7bcbf21496a6fc042374f86b282
Parents: 9b4c788
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 14:14:20 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 14:14:20 2016 -0400

----------------------------------------------------------------------
 .../dev/developer/development-environment.asciidoc  |  2 ++
 docs/src/dev/developer/release.asciidoc             | 16 ++++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/079cc20d/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 632100c..ade4288 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 ////
+[[development-environment]]
 Development Environment
 =======================
 
@@ -21,6 +22,7 @@ TinkerPop is fairly large body of code spread across many modules and covering m
 this complexity, it remains relatively straightforward a project to build. This following subsections explain how to
 configure a development environment for TinkerPop.
 
+[[system-configuration]]
 System Configuration
 --------------------
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/079cc20d/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index e1007e0..f4d29ff 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -32,6 +32,10 @@ from a previous version or from recent `SNAPSHOT`. When using one generated for
 commands end up being set to the version that is being released, making cut and paste of those commands less labor
 intensive and error prone.
 
+IMPORTANT: The following instructions assume that the release manager's <<development-environment,environment> is setup
+properly for release and includes a `.glv` file in `gremlin-python` as described in the <<python-environment,Python Environment>>
+section, so that the `gremlin-python` module builds in full.
+
 Pre-flight Check
 ----------------
 
@@ -46,7 +50,7 @@ and communicating with other members of the community.
 under release is protected. Tweaks to documentation and other odds and ends related to release are still allowed
 during this period.
 . At some point during the week:
-.. Run the full integration test suite: `mvn clean install -DskipIntegrationTests=false -DincludeNeo4j -DglvPython`
+.. Run the full integration test suite: `mvn clean install -DskipIntegrationTests=false -DincludeNeo4j`
 .. Deploy a final SNAPSHOT to the snapshot repository.
 .. Review LICENSE and NOTICE files to make sure that no <<dependencies,changes are needed>>.
 .. Review javadoc filters on the "Core API" docs to be sure nothing needs to change.
@@ -70,7 +74,7 @@ A release candidate is an unofficial release that is represented by a tagged ver
 offered in cases where there is significant change in a particular version and the potential for upgrades and problems
 might be high.
 
-. `mvn clean install -DincludeNeo4j -DglvPython`
+. `mvn clean install -DincludeNeo4j`
 .. `mvn verify -DskipIntegrationTests=false -DincludeNeo4j`
 .. `mvn verify -DskipPerformanceTests=false`
 . `bin/publish-docs.sh <username>` - note that under a release candidate the documentation is published as SNAPSHOT
@@ -147,14 +151,14 @@ Release & Promote
 -----------------
 
 . Login to link:https://repository.apache.org/[Apache Nexus] and release the previously closed repository.
-. Deploy to link:https://pypi.python.org/pypi[pypi] with `mvn clean install -DskipTests -DglvPython -Dpypi`. It is likely necessary
-that this build will occur from the tag for the release, so be sure to checkout the tag first before executing this step.
+. Deploy to link:https://pypi.python.org/pypi[pypi]
+.. This build will likely occur from the tag for the release, so be sure to checkout the tag first before executing this step.
+.. `mvn clean install -DskipTests`
+.. `mvn deploy -pl gremlin-python -DskipTests -Dpypi`
 . `svn co --depth empty https://dist.apache.org/repos/dist/dev/tinkerpop dev; svn up dev/xx.yy.zz`
 . `svn co --depth empty https://dist.apache.org/repos/dist/release/tinkerpop release; mkdir release/xx.yy.zz`
 . Copy release files from `dev/xx.yy.zz` to `release/xx.yy.zz`.
 . `cd release; svn add xx.yy.zz/; svn ci -m "TinkerPop xx.yy.zz release"`
-. Deploy `gremlin-python` to pypi with `mvn deploy -pl gremlin-python -Dpypi -DskipTests` (note that `gremlin-python`
-should be built with `-DglvPython` first without skipping tests so that the distribution will be present)
 . Update homepage with references to latest distribution and to other internal links elsewhere on the page.
 . Wait for Apache Sonatype to sync the artifacts to Maven Central at (link:http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/[http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/]).
 . Wait for zip distributions to to sync to the Apache mirrors (i.e ensure the download links work from a mirror).


[45/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by pi...@apache.org.
Merge remote-tracking branch 'origin/tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/14bca062
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/14bca062
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/14bca062

Branch: refs/heads/TINKERPOP-1404
Commit: 14bca062cf4deb15f00b99b09b1bd746a2dca1e8
Parents: c2c0023 e7e7481
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 16 07:44:14 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 07:44:14 2016 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------



[21/50] [abbrv] tinkerpop git commit: Allow VertexPrograms to declare their traverser requirements.

Posted by pi...@apache.org.
Allow VertexPrograms to declare their traverser requirements.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a0cbe2d2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a0cbe2d2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a0cbe2d2

Branch: refs/heads/TINKERPOP-1404
Commit: a0cbe2d284a02cb69a0ef495372342b752dc88a4
Parents: 9004b4b
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Sep 12 10:43:39 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 12:34:28 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../gremlin/process/computer/VertexProgram.java |  11 +
 .../step/map/ProgramVertexProgramStep.java      |   9 +
 .../process/computer/GraphComputerTest.java     | 246 ++++++++++++++++++-
 .../decoration/TranslationStrategy.java         |  10 +-
 5 files changed, 270 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 24ed601..b359f37 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
+* VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
 * Added missing `InetAddress` to GraphSON extension module.
 
 [[release-3-2-2]]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
index 15243fa..1c8d0cb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.computer;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 
@@ -184,6 +185,16 @@ public interface VertexProgram<M> extends Cloneable {
     }
 
     /**
+     * The traverser requirements that are needed when this VP is used as part of a traversal.
+     * The default is an empty set.
+     *
+     * @return the traverser requirements
+     */
+    public default Set<TraverserRequirement> getTraverserRequirements() {
+        return Collections.emptySet();
+    }
+
+    /**
      * When multiple workers on a single machine need VertexProgram instances, it is possible to use clone.
      * This will provide a speedier way of generating instances, over the {@link VertexProgram#storeState} and {@link VertexProgram#loadState} model.
      * The default implementation simply returns the object as it assumes that the VertexProgram instance is a stateless singleton.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
index 31eb04b..49add72 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ProgramVertexProgramStep.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Memory;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -32,6 +33,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -40,6 +42,7 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
 
     private final Map<String, Object> configuration;
     private final String toStringOfVertexProgram;
+    private final Set<TraverserRequirement> traverserRequirements;
 
     public ProgramVertexProgramStep(final Traversal.Admin traversal, final VertexProgram vertexProgram) {
         super(traversal);
@@ -48,6 +51,7 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
         base.setDelimiterParsingDisabled(true);
         vertexProgram.storeState(base);
         this.toStringOfVertexProgram = vertexProgram.toString();
+        this.traverserRequirements = vertexProgram.getTraverserRequirements();
     }
 
     @Override
@@ -62,6 +66,11 @@ public final class ProgramVertexProgramStep extends VertexProgramStep {
     }
 
     @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return this.traverserRequirements;
+    }
+
+    @Override
     public int hashCode() {
         return super.hashCode() ^ this.configuration.hashCode();
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
index 761ae06..108550a 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
@@ -18,34 +18,43 @@
  */
 package org.apache.tinkerpop.gremlin.process.computer;
 
+import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationUtils;
 import org.apache.tinkerpop.gremlin.ExceptionCoverage;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
 import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
 import org.apache.tinkerpop.gremlin.process.computer.util.StaticVertexProgram;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.junit.Test;
 
+import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -54,13 +63,17 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.apache.tinkerpop.gremlin.structure.T.id;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeNoException;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -94,6 +107,9 @@ import static org.junit.Assert.fail;
 @ExceptionCoverage(exceptionClass = Graph.Exceptions.class, methods = {
         "graphDoesNotSupportProvidedGraphComputer"
 })
+@ExceptionCoverage(exceptionClass = Path.Exceptions.class, methods = {
+        "shouldFailWithImproperTraverserRequirements"
+})
 @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
 public class GraphComputerTest extends AbstractGremlinProcessTest {
 
@@ -1603,7 +1619,7 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("person")).edges(__.<Vertex>bothE("knows").has("weight", P.gt(0.5f))).program(new VertexProgramM(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>bothE().limit(0)).program(new VertexProgramM(VertexProgramM.VERTICES_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>outE().limit(1)).program(new VertexProgramM(VertexProgramM.ONE_OUT_EDGE_ONLY)).submit().get();
-        graphProvider.getGraphComputer(graph).edges(__.outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
+        graphProvider.getGraphComputer(graph).edges(outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
 
         /// VERTEX PROGRAM + MAP REDUCE
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("software")).program(new VertexProgramM(VertexProgramM.SOFTWARE_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.SOFTWARE_ONLY)).submit().get();
@@ -1613,7 +1629,7 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("person")).edges(__.<Vertex>bothE("knows").has("weight", P.gt(0.5f))).program(new VertexProgramM(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>bothE().limit(0)).program(new VertexProgramM(VertexProgramM.VERTICES_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.VERTICES_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>outE().limit(1)).program(new VertexProgramM(VertexProgramM.ONE_OUT_EDGE_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.ONE_OUT_EDGE_ONLY)).submit().get();
-        graphProvider.getGraphComputer(graph).edges(__.outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
+        graphProvider.getGraphComputer(graph).edges(outE()).program(new VertexProgramM(VertexProgramM.OUT_EDGES_ONLY)).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
 
         /// MAP REDUCE ONLY
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("software")).mapReduce(new MapReduceJ(VertexProgramM.SOFTWARE_ONLY)).submit().get();
@@ -1623,7 +1639,7 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
         graphProvider.getGraphComputer(graph).vertices(__.hasLabel("person")).edges(__.<Vertex>bothE("knows").has("weight", P.gt(0.5f))).mapReduce(new MapReduceJ(VertexProgramM.PEOPLE_KNOWS_WELL_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>bothE().limit(0)).mapReduce(new MapReduceJ(VertexProgramM.VERTICES_ONLY)).submit().get();
         graphProvider.getGraphComputer(graph).edges(__.<Vertex>outE().limit(1)).mapReduce(new MapReduceJ(VertexProgramM.ONE_OUT_EDGE_ONLY)).submit().get();
-        graphProvider.getGraphComputer(graph).edges(__.outE()).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
+        graphProvider.getGraphComputer(graph).edges(outE()).mapReduce(new MapReduceJ(VertexProgramM.OUT_EDGES_ONLY)).submit().get();
 
         // EXCEPTION HANDLING
         try {
@@ -2327,4 +2343,226 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
             return GraphComputer.Persist.VERTEX_PROPERTIES;
         }
     }
-}
+
+    ///////////////////////////////////
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void shouldSucceedWithProperTraverserRequirements() throws Exception {
+
+        final AtomicInteger counter = new AtomicInteger(0);
+        final Map<String, Object> idsByName = new HashMap<>();
+        final VertexProgramQ vp = VertexProgramQ.build().from("a").property("coworkers").create();
+
+        g.V().hasLabel("person").filter(outE("created")).valueMap(true, "name").forEachRemaining((Map map) ->
+                idsByName.put((String) ((List) map.get("name")).get(0), map.get(id)));
+
+        try {
+            g.V().as("a").out("created").in("created").program(vp).dedup()
+                    .valueMap("name", "coworkers").forEachRemaining((Map<String, Object> map) -> {
+
+                final String name = (String) ((List) map.get("name")).get(0);
+                final Map<Object, Long> coworkers = (Map<Object, Long>) ((List) map.get("coworkers")).get(0);
+                assertTrue(idsByName.containsKey(name));
+                assertEquals(2, coworkers.size());
+                idsByName.keySet().stream().filter(cn -> !cn.equals(name)).forEach(cn -> {
+                    final Object cid = idsByName.get(cn);
+                    assertTrue(coworkers.containsKey(cid));
+                    assertEquals(1L, coworkers.get(cid).longValue());
+                });
+                counter.incrementAndGet();
+            });
+
+            assertEquals(3, counter.intValue());
+        } catch (VerificationException ex) {
+            assumeNoException(ex);
+        }
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void shouldFailWithImproperTraverserRequirements() throws Exception {
+
+        final AtomicInteger counter = new AtomicInteger(0);
+        final Map<String, Object> idsByName = new HashMap<>();
+        final VertexProgramQ vp = VertexProgramQ.build().from("a").property("coworkers").
+                useTraverserRequirements(false).create();
+
+        g.V().hasLabel("person").filter(outE("created")).valueMap(true, "name").forEachRemaining((Map map) ->
+                idsByName.put((String) ((List) map.get("name")).get(0), map.get(id)));
+
+        try {
+            g.V().as("a").out("created").in("created").program(vp).dedup()
+                    .valueMap("name", "coworkers").forEachRemaining((Map<String, Object> map) -> {
+
+                final String name = (String) ((List) map.get("name")).get(0);
+                final Map coworkers = (Map) ((List) map.get("coworkers")).get(0);
+                assertTrue(idsByName.containsKey(name));
+                assertTrue(coworkers.isEmpty());
+                counter.incrementAndGet();
+            });
+
+            assertEquals(3, counter.intValue());
+        } catch (VerificationException ex) {
+            assumeNoException(ex);
+        }
+    }
+
+    private static class VertexProgramQ implements VertexProgram<Object> {
+
+        private static final String VERTEX_PROGRAM_Q_CFG_PREFIX = "gremlin.vertexProgramQ";
+        private static final String MAP_KEY_CFG_KEY = VERTEX_PROGRAM_Q_CFG_PREFIX + ".source";
+        private static final String PROPERTY_CFG_KEY = VERTEX_PROGRAM_Q_CFG_PREFIX + ".property";
+        private static final String USE_TRAVERSER_REQUIREMENTS_CFG_KEY = VERTEX_PROGRAM_Q_CFG_PREFIX + ".useTraverserRequirements";
+
+        private final Set<VertexComputeKey> elementComputeKeys;
+        private Configuration configuration;
+        private String sourceKey;
+        private String propertyKey;
+        private Set<TraverserRequirement> traverserRequirements;
+
+        private VertexProgramQ() {
+            elementComputeKeys = new HashSet<>();
+        }
+
+        @Override
+        public void storeState(final Configuration config) {
+            VertexProgram.super.storeState(config);
+            if (configuration != null) {
+                ConfigurationUtils.copy(configuration, config);
+            }
+        }
+
+        @Override
+        public void loadState(final Graph graph, final Configuration config) {
+            configuration = new BaseConfiguration();
+            if (config != null) {
+                ConfigurationUtils.copy(config, configuration);
+            }
+            sourceKey = configuration.getString(MAP_KEY_CFG_KEY);
+            propertyKey = configuration.getString(PROPERTY_CFG_KEY);
+            traverserRequirements = configuration.getBoolean(USE_TRAVERSER_REQUIREMENTS_CFG_KEY, true)
+                    ? Collections.singleton(TraverserRequirement.LABELED_PATH) : Collections.emptySet();
+            elementComputeKeys.add(VertexComputeKey.of(propertyKey, false));
+        }
+
+        @Override
+        public void setup(final Memory memory) {
+        }
+
+        @Override
+        public void execute(final Vertex vertex, final Messenger messenger, final Memory memory) {
+            final Property<TraverserSet> haltedTraversers = vertex.property(TraversalVertexProgram.HALTED_TRAVERSERS);
+            if (!haltedTraversers.isPresent()) return;
+            final Iterator iterator = haltedTraversers.value().iterator();
+            if (iterator.hasNext()) {
+                List<Map.Entry<Object, Long>> list = new ArrayList<>();
+                while (iterator.hasNext()) {
+                    final Traverser t = (Traverser) iterator.next();
+                    try {
+                        final Vertex source = (Vertex) t.path(sourceKey);
+                        if (!source.id().equals(vertex.id())) {
+                            final Map.Entry<Object, Long> entry = new AbstractMap.SimpleEntry<>(source.id(), t.bulk());
+                            list.add(entry);
+                        }
+                        assertFalse(traverserRequirements.isEmpty());
+                    } catch (Exception ex) {
+                        assertTrue(traverserRequirements.isEmpty());
+                        validateException(Path.Exceptions.stepWithProvidedLabelDoesNotExist(sourceKey), ex);
+                    }
+                }
+                final Map<Object, Number> map = new HashMap<>(list.size(), 1f);
+                for (Map.Entry<Object, Long> entry : list) map.put(entry.getKey(), entry.getValue());
+                vertex.property(propertyKey, map);
+            }
+        }
+
+        @Override
+        public boolean terminate(final Memory memory) {
+            return memory.isInitialIteration();
+        }
+
+        @Override
+        public Set<MessageScope> getMessageScopes(final Memory memory) {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Set<VertexComputeKey> getVertexComputeKeys() {
+            return elementComputeKeys;
+        }
+
+        @SuppressWarnings({"CloneDoesntDeclareCloneNotSupportedException", "CloneDoesntCallSuperClone"})
+        @Override
+        public VertexProgram<Object> clone() {
+            return this;
+        }
+
+        @Override
+        public GraphComputer.ResultGraph getPreferredResultGraph() {
+            return GraphComputer.ResultGraph.NEW;
+        }
+
+        @Override
+        public GraphComputer.Persist getPreferredPersist() {
+            return GraphComputer.Persist.VERTEX_PROPERTIES;
+        }
+
+        @Override
+        public Set<TraverserRequirement> getTraverserRequirements() {
+            return this.traverserRequirements;
+        }
+
+        @Override
+        public Features getFeatures() {
+            return new Features() {
+                @Override
+                public boolean requiresVertexPropertyAddition() {
+                    return true;
+                }
+            };
+        }
+
+        public static Builder build() {
+            return new Builder();
+        }
+
+        static class Builder extends AbstractVertexProgramBuilder<Builder> {
+
+            private Builder() {
+                super(VertexProgramQ.class);
+            }
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public VertexProgramQ create(final Graph graph) {
+                if (graph != null) {
+                    ConfigurationUtils.append(graph.configuration().subset(VERTEX_PROGRAM_Q_CFG_PREFIX), configuration);
+                }
+                return (VertexProgramQ) VertexProgram.createVertexProgram(graph, configuration);
+            }
+
+            public VertexProgramQ create() {
+                return create(null);
+            }
+
+            public Builder from(final String label) {
+                configuration.setProperty(MAP_KEY_CFG_KEY, label);
+                return this;
+            }
+
+            public Builder property(final String name) {
+                configuration.setProperty(PROPERTY_CFG_KEY, name);
+                return this;
+            }
+
+            /**
+             * This is only configurable for the purpose of testing. In a real-world VP this would be a bad pattern.
+             */
+            public Builder useTraverserRequirements(final boolean value) {
+                configuration.setProperty(USE_TRAVERSER_REQUIREMENTS_CFG_KEY, value);
+                return this;
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0cbe2d2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
index 92c9483..6b06d60 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
@@ -70,9 +71,12 @@ public final class TranslationStrategy extends AbstractTraversalStrategy<Travers
             return;
 
         // verifications to ensure unsupported steps do not exist in the traversal
-        if (Boolean.valueOf(System.getProperty("is.testing", "false")) &&
-                (traversal.getBytecode().toString().contains("$") || traversal.getBytecode().toString().contains("HashSetSupplier")))
-            throw new VerificationException("Test suite does not support lambdas", traversal);
+        if (Boolean.valueOf(System.getProperty("is.testing", "false"))) {
+            if (traversal.getBytecode().toString().contains("$") || traversal.getBytecode().toString().contains("HashSetSupplier"))
+                throw new VerificationException("Test suite does not support lambdas", traversal);
+            if (TraversalHelper.hasStepOfAssignableClassRecursively(ProgramVertexProgramStep.class, traversal))
+                throw new VerificationException("Test suite does not support embedded vertex programs", traversal);
+        }
 
         final Traversal.Admin<?, ?> translatedTraversal;
         final Bytecode bytecode = Boolean.valueOf(System.getProperty("is.testing", "false")) ?


[16/50] [abbrv] tinkerpop git commit: Centrally manage gmavenplus plugin and bump to 1.5

Posted by pi...@apache.org.
Centrally manage gmavenplus plugin and bump to 1.5


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9b4c7884
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9b4c7884
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9b4c7884

Branch: refs/heads/TINKERPOP-1404
Commit: 9b4c7884dc5c3e09086113b3720f07e1501951c4
Parents: 2106b10
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 13:45:41 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 13:45:41 2016 -0400

----------------------------------------------------------------------
 giraph-gremlin/pom.xml      | 18 ------------------
 gremlin-console/pom.xml     | 18 ------------------
 gremlin-groovy-test/pom.xml | 18 ------------------
 gremlin-groovy/pom.xml      | 18 ------------------
 gremlin-python/pom.xml      | 22 ++--------------------
 hadoop-gremlin/pom.xml      | 18 ------------------
 neo4j-gremlin/pom.xml       | 18 ------------------
 pom.xml                     | 25 ++++++++++++++++++++++++-
 spark-gremlin/pom.xml       | 18 ------------------
 9 files changed, 26 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/giraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/giraph-gremlin/pom.xml b/giraph-gremlin/pom.xml
index 47b1adc..528b2ad 100644
--- a/giraph-gremlin/pom.xml
+++ b/giraph-gremlin/pom.xml
@@ -228,24 +228,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-console/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/pom.xml b/gremlin-console/pom.xml
index 7662a6b..aae5e41 100644
--- a/gremlin-console/pom.xml
+++ b/gremlin-console/pom.xml
@@ -206,24 +206,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                        <configuration>
-                            <invokeDynamic>true</invokeDynamic>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-groovy-test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/pom.xml b/gremlin-groovy-test/pom.xml
index 2bb8502..614591e 100644
--- a/gremlin-groovy-test/pom.xml
+++ b/gremlin-groovy-test/pom.xml
@@ -50,24 +50,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-groovy/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml
index 5518be8..171770f 100644
--- a/gremlin-groovy/pom.xml
+++ b/gremlin-groovy/pom.xml
@@ -113,24 +113,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index b2ba875..76afe60 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -124,24 +124,6 @@
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -458,7 +440,8 @@
 
                             <!--
                             use pytest to execute native python tests - output of xunit output is configured in setup.cfg.
-                            had to use the ant plugin - maven-exec-plugin
+                            this has to be an integration-test because we need gremlin-server running and the standard
+                            test phase doesn't have a pre/post event like integration-test does.
                             -->
                             <execution>
                                 <id>native-python-test</id>
@@ -482,7 +465,6 @@
                     <plugin>
                         <groupId>org.codehaus.gmavenplus</groupId>
                         <artifactId>gmavenplus-plugin</artifactId>
-                        <version>1.2</version>
                         <dependencies>
                             <dependency>
                                 <groupId>org.codehaus.groovy</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/hadoop-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/pom.xml b/hadoop-gremlin/pom.xml
index 542fd96..74f91b1 100644
--- a/hadoop-gremlin/pom.xml
+++ b/hadoop-gremlin/pom.xml
@@ -223,24 +223,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/neo4j-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/pom.xml b/neo4j-gremlin/pom.xml
index d3e5082..109f372 100644
--- a/neo4j-gremlin/pom.xml
+++ b/neo4j-gremlin/pom.xml
@@ -94,24 +94,6 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e37746c..7a4c230 100644
--- a/pom.xml
+++ b/pom.xml
@@ -293,7 +293,7 @@ limitations under the License.
                         <exclude>**/src/main/static/**</exclude>
                         <exclude>**/_bsp/**</exclude>
                         <exclude>DEPENDENCIES</exclude>
-                        <exclude>.glv</exclude>
+                        <exclude>**/.glv</exclude>
                     </excludes>
                     <licenses>
                         <license implementation="org.apache.rat.analysis.license.ApacheSoftwareLicense20"/>
@@ -433,6 +433,29 @@ limitations under the License.
                     <artifactId>maven-javadoc-plugin</artifactId>
                     <version>${javadoc-plugin.version}</version>
                 </plugin>
+                <plugin>
+                    <groupId>org.codehaus.gmavenplus</groupId>
+                    <artifactId>gmavenplus-plugin</artifactId>
+                    <version>1.5</version>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>addSources</goal>
+                                <goal>addTestSources</goal>
+                                <goal>generateStubs</goal>
+                                <goal>compile</goal>
+                                <goal>testGenerateStubs</goal>
+                                <goal>testCompile</goal>
+                                <goal>removeStubs</goal>
+                                <goal>removeTestStubs</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <targetBytecode>1.8</targetBytecode>
+                        <invokeDynamic>true</invokeDynamic>
+                    </configuration>
+                </plugin>
             </plugins>
         </pluginManagement>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9b4c7884/spark-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/spark-gremlin/pom.xml b/spark-gremlin/pom.xml
index e018b21..7f4137e 100644
--- a/spark-gremlin/pom.xml
+++ b/spark-gremlin/pom.xml
@@ -362,24 +362,6 @@
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
-                <version>1.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>addSources</goal>
-                            <goal>addTestSources</goal>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>testGenerateStubs</goal>
-                            <goal>testCompile</goal>
-                            <goal>removeStubs</goal>
-                            <goal>removeTestStubs</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <invokeDynamic>true</invokeDynamic>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>


[43/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1409'

Posted by pi...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1409'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c2c00236
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c2c00236
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c2c00236

Branch: refs/heads/TINKERPOP-1404
Commit: c2c00236aa6fa3ca3d92c76b61bece4b94d0366d
Parents: 0ee005b 5bc1c7b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 19:02:32 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 19:02:32 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 ++
 .../src/reference/gremlin-applications.asciidoc |  3 ++-
 .../upgrade/release-3.2.x-incubating.asciidoc   | 27 ++++++++++++++++++++
 .../tinkerpop/gremlin/console/Console.groovy    | 19 ++++++++++----
 .../gremlin/console/Preferences.groovy          | 12 ++++-----
 .../console/commands/GremlinSetCommand.groovy   |  2 +-
 6 files changed, 52 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c2c00236/CHANGELOG.asciidoc
----------------------------------------------------------------------


[50/50] [abbrv] tinkerpop git commit: Removed adding labels to the traverser in AbstractStep. Steps that call traverser.split(r, step) have already added the labels to the traverser. Steps that do not call traverser.split(r, step) add the labels manually

Posted by pi...@apache.org.
Removed adding labels to the traverser in AbstractStep.
Steps that call traverser.split(r, step) have already added the labels to the traverser.
Steps that do not call traverser.split(r, step) add the labels manually by overriding AbstractStep.prepareTraversalForNextStep().
ImmutablePath hold a direct reference to the labels. It no longer makes a copy.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c1556fe8
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c1556fe8
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c1556fe8

Branch: refs/heads/TINKERPOP-1404
Commit: c1556fe82c58527dc4425d23d1d69ce324e62cfa
Parents: 54ed33d
Author: pieter <pi...@gmail.com>
Authored: Wed Aug 24 12:47:35 2016 +0200
Committer: pieter <pi...@apache.org>
Committed: Mon Sep 19 19:30:31 2016 +0200

----------------------------------------------------------------------
 .../gremlin/process/GremlinPathBenchmark.java   | 70 ++++++++++++++++++++
 .../traversal/step/filter/FilterStep.java       |  9 +++
 .../traversal/step/map/NoOpBarrierStep.java     |  9 +++
 .../step/sideEffect/AggregateStep.java          |  9 +++
 .../step/sideEffect/SideEffectStep.java         |  9 +++
 .../traversal/step/sideEffect/StartStep.java    |  9 +++
 .../traversal/step/util/AbstractStep.java       |  4 +-
 .../step/util/CollectingBarrierStep.java        |  9 +++
 .../traversal/step/util/ImmutablePath.java      |  5 +-
 .../structure/util/detached/DetachedPath.java   | 11 +--
 10 files changed, 135 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/GremlinPathBenchmark.java
----------------------------------------------------------------------
diff --git a/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/GremlinPathBenchmark.java b/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/GremlinPathBenchmark.java
new file mode 100644
index 0000000..5b60f5b
--- /dev/null
+++ b/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/GremlinPathBenchmark.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process;
+
+import org.apache.tinkerpop.benchmark.util.AbstractGraphBenchmark;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.Setup;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Date: 2016/07/22
+ * Time: 7:26 AM
+ */
+public class GremlinPathBenchmark extends AbstractGraphBenchmark {
+
+    private Vertex a;
+    private final static int COUNT = 1_000_000;
+
+    @Setup
+    public void prepare() throws IOException {
+        super.prepare();
+        a = graph.addVertex(T.label, "A", "name", "a1");
+        for (int i = 1; i < COUNT; i++) {
+            Vertex b = graph.addVertex(T.label, "B", "name", "name_" + i);
+            a.addEdge("outB", b);
+            for (int j = 0; j < 1; j++) {
+                Vertex c = graph.addVertex(T.label, "C", "name", "name_" + i + " " + j);
+                b.addEdge("outC", c);
+            }
+        }
+    }
+
+    @Benchmark
+    @BenchmarkMode(Mode.AverageTime)
+    public void g_path() throws Exception {
+        GraphTraversal<Vertex, Path> traversal = g.V(a).as("a").out().as("b").out().as("c").path();
+        int count = 1;
+        while (traversal.hasNext()) {
+            Path path = traversal.next();
+            count++;
+        }
+        assertEquals(COUNT, count);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
index e07d951..ae8f5ee 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
@@ -40,5 +40,14 @@ public abstract class FilterStep<S> extends AbstractStep<S, S> {
         }
     }
 
+    @Override
+    protected Traverser.Admin<S> prepareTraversalForNextStep(final Traverser.Admin<S> traverser) {
+        super.prepareTraversalForNextStep(traverser);
+        if (!this.traverserStepIdAndLabelsSetByChild) {
+            traverser.addLabels(this.labels);
+        }
+        return traverser;
+    }
+
     protected abstract boolean filter(final Traverser.Admin<S> traverser);
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
index bedf078..32ac5be 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
@@ -57,6 +57,15 @@ public final class NoOpBarrierStep<S> extends AbstractStep<S, S> implements Loca
     }
 
     @Override
+    protected Traverser.Admin<S> prepareTraversalForNextStep(final Traverser.Admin<S> traverser) {
+        super.prepareTraversalForNextStep(traverser);
+        if (!this.traverserStepIdAndLabelsSetByChild) {
+            traverser.addLabels(this.labels);
+        }
+        return traverser;
+    }
+
+    @Override
     public Set<TraverserRequirement> getRequirements() {
         return Collections.singleton(TraverserRequirement.BULK);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
index 7f4c993..b088bc5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
@@ -111,6 +111,15 @@ public final class AggregateStep<S> extends AbstractStep<S, S> implements SideEf
     }
 
     @Override
+    protected Traverser.Admin<S> prepareTraversalForNextStep(final Traverser.Admin<S> traverser) {
+        super.prepareTraversalForNextStep(traverser);
+        if (!this.traverserStepIdAndLabelsSetByChild && !getLabels().isEmpty()) {
+            traverser.addLabels(getLabels());
+        }
+        return traverser;
+    }
+
+    @Override
     public void processAllStarts() {
         if (this.starts.hasNext()) {
             final BulkSet<Object> bulkSet = new BulkSet<>();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectStep.java
index 46708d4..207cd0f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectStep.java
@@ -39,4 +39,13 @@ public abstract class SideEffectStep<S> extends AbstractStep<S, S> {
         this.sideEffect(traverser);
         return traverser;
     }
+
+    @Override
+    protected Traverser.Admin<S> prepareTraversalForNextStep(final Traverser.Admin<S> traverser) {
+        super.prepareTraversalForNextStep(traverser);
+        if (!this.traverserStepIdAndLabelsSetByChild) {
+            traverser.addLabels(this.labels);
+        }
+        return traverser;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
index cfb7323..361228c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
@@ -69,6 +69,15 @@ public class StartStep<S> extends AbstractStep<S, S> {
     }
 
     @Override
+    protected Traverser.Admin<S> prepareTraversalForNextStep(final Traverser.Admin<S> traverser) {
+        super.prepareTraversalForNextStep(traverser);
+        if (!this.traverserStepIdAndLabelsSetByChild) {
+            traverser.addLabels(this.labels);
+        }
+        return traverser;
+    }
+
+    @Override
     public StartStep<S> clone() {
         final StartStep<S> clone = (StartStep<S>) super.clone();
         clone.first = true;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index 9eb1b3c..5e8d8e2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@ -201,10 +201,10 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
         return result;
     }
 
-    private final Traverser.Admin<E> prepareTraversalForNextStep(final Traverser.Admin<E> traverser) {
+    protected Traverser.Admin<E> prepareTraversalForNextStep(final Traverser.Admin<E> traverser) {
         if (!this.traverserStepIdAndLabelsSetByChild) {
             traverser.setStepId(this.nextStep.getId());
-            traverser.addLabels(this.labels);
+//            traverser.addLabels(this.labels);
         }
         return traverser;
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
index f9c85a2..057e1fa 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
@@ -112,6 +112,15 @@ public abstract class CollectingBarrierStep<S> extends AbstractStep<S, S> implem
     }
 
     @Override
+    protected Traverser.Admin<S> prepareTraversalForNextStep(final Traverser.Admin<S> traverser) {
+        super.prepareTraversalForNextStep(traverser);
+        if (!this.traverserStepIdAndLabelsSetByChild) {
+            traverser.addLabels(this.labels);
+        }
+        return traverser;
+    }
+
+    @Override
     public CollectingBarrierStep<S> clone() {
         final CollectingBarrierStep<S> clone = (CollectingBarrierStep<S>) super.clone();
         clone.traverserSet = new TraverserSet<>();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
index 729b4f3..03dc1e9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
@@ -35,7 +35,7 @@ public class ImmutablePath implements Path, ImmutablePathImpl, Serializable, Clo
 
     private ImmutablePathImpl previousPath = TailPath.instance();
     private Object currentObject;
-    private Set<String> currentLabels = new LinkedHashSet<>();
+    private Set<String> currentLabels;
 
     protected ImmutablePath() {
 
@@ -54,7 +54,7 @@ public class ImmutablePath implements Path, ImmutablePathImpl, Serializable, Clo
     private ImmutablePath(final ImmutablePathImpl previousPath, final Object currentObject, final Set<String> currentLabels) {
         this.previousPath = previousPath;
         this.currentObject = currentObject;
-        this.currentLabels.addAll(currentLabels);
+        this.currentLabels = currentLabels;
     }
 
     @Override
@@ -334,4 +334,5 @@ public class ImmutablePath implements Path, ImmutablePathImpl, Serializable, Clo
             return other instanceof Path && ((Path) other).size() == 0;
         }
     }
+
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c1556fe8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
index 10f9dfb..1158b02 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
@@ -24,6 +24,8 @@ import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.util.Attachable;
 
+import java.util.HashSet;
+import java.util.Set;
 import java.util.function.Function;
 
 /**
@@ -43,20 +45,19 @@ public class DetachedPath extends MutablePath implements Attachable<Path> {
         path.forEach((object, labels) -> {
             if (object instanceof DetachedElement || object instanceof DetachedProperty || object instanceof DetachedPath) {
                 this.objects.add(object);
-                this.labels.add(labels);
             } else if (object instanceof Element) {
                 this.objects.add(DetachedFactory.detach((Element) object, withProperties));
-                this.labels.add(labels);
             } else if (object instanceof Property) {
                 this.objects.add(DetachedFactory.detach((Property) object));
-                this.labels.add(labels);
             } else if (object instanceof Path) {
                 this.objects.add(DetachedFactory.detach((Path) object, withProperties));
-                this.labels.add(labels);
             } else {
                 this.objects.add(object);
-                this.labels.add(labels);
             }
+            //Make a copy of the labels as its an UnmodifiableSet which can not be serialized.
+            Set<String> detachedLabels = new HashSet<>();
+            detachedLabels.addAll(labels);
+            this.labels.add(detachedLabels);
         });
     }
 


[10/50] [abbrv] tinkerpop git commit: Allow -DskipTests to still produce a valid build of gremlin-python

Posted by pi...@apache.org.
Allow -DskipTests to still produce a valid build of gremlin-python


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2106b10e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2106b10e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2106b10e

Branch: refs/heads/TINKERPOP-1404
Commit: 2106b10e74008481b19bba98635f65dda99800bf
Parents: 2fbeb59
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 12:16:13 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 12:16:13 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2106b10e/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 3695c0d..b2ba875 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -324,14 +324,13 @@
                             </systemPropertyVariables>
                         </configuration>
                     </plugin>
-                    <!-- required for the jython tests  -->
                     <plugin>
                         <groupId>net.sf.mavenjython</groupId>
                         <artifactId>jython-compile-maven-plugin</artifactId>
                         <version>1.4</version>
                         <executions>
                             <execution>
-                                <phase>compile</phase>
+                                <phase>process-resources</phase>
                                 <goals>
                                     <goal>jython</goal>
                                 </goals>
@@ -413,12 +412,11 @@
                             </execution>
                             <execution>
                                 <id>native-python-build</id>
-                                <phase>generate-test-resources</phase>
+                                <phase>compile</phase>
                                 <goals>
                                     <goal>run</goal>
                                 </goals>
                                 <configuration>
-                                    <skip>${skipTests}</skip>
                                     <target>
                                         <exec executable="env/bin/python" dir="${project.build.directory}/python"
                                               failonerror="true">


[14/50] [abbrv] tinkerpop git commit: fixed small import typos, using six for version info

Posted by pi...@apache.org.
fixed small import typos, using six for version info


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a1f4497d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a1f4497d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a1f4497d

Branch: refs/heads/TINKERPOP-1404
Commit: a1f4497d9bf9a1cbe7b560c481d079025bdd3beb
Parents: b61f0d8
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 12:37:45 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 12:37:45 2016 -0400

----------------------------------------------------------------------
 .../main/jython/tests/driver/test_driver_remote_connection.py   | 1 -
 gremlin-python/src/main/jython/tests/structure/test_graph.py    | 5 +++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a1f4497d/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 46e2e1f..6ec8183 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -19,7 +19,6 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-import pytest
 import unittest
 from unittest import TestCase
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a1f4497d/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 63d9a1e..9e3a681 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -19,10 +19,11 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-import sys
 import unittest
 from unittest import TestCase
 
+import six
+
 from gremlin_python.compat import long
 from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
@@ -62,7 +63,7 @@ class TestGraph(TestCase):
         assert 29 == property.value
         assert isinstance(property.value, int)
         assert property == Property("age", 29)
-        if not sys.version_info > (3,):
+        if not six.PY3:
             assert property != Property("age", long(29))
         #
         for i in [vertex, edge, vertex_property, property]:


[41/50] [abbrv] tinkerpop git commit: Renamed empty.result.indicator to result.indicator.null

Posted by pi...@apache.org.
Renamed empty.result.indicator to result.indicator.null


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/75b4f204
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/75b4f204
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/75b4f204

Branch: refs/heads/TINKERPOP-1404
Commit: 75b4f204a973de5f7b9d4271093810d669b85f65
Parents: 6599159
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 16:05:07 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 16:05:07 2016 -0400

----------------------------------------------------------------------
 .../src/reference/gremlin-applications.asciidoc |  2 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   | 27 ++++++++++++++++++++
 .../gremlin/console/Preferences.groovy          | 12 ++++-----
 .../console/commands/GremlinSetCommand.groovy   |  2 +-
 4 files changed, 35 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 13ac6ff..bff9f0f 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -173,7 +173,7 @@ Preferences are set with `:set name value`.  Values can contain spaces when quot
 |result.prompt.color | colors | Color of the result prompt.
 |input.prompt | string | Text of the input prompt.
 |result.prompt | string | Text of the result prompt.
-|empty.result.indicator | string | Text of the void/no results indicator - setting to empty string (i.e. "" at the
+|result.indicator.null | string | Text of the void/no results indicator - setting to empty string (i.e. "" at the
 command line) will print no result line in these cases.
 |=========================================================
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 2cf8ef2..5db0522 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -32,6 +32,33 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.3/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
+Renamed Null Result Preference
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In 3.2.2, the Gremlin Console introduced a setting called `empty.result.indicator`, which controlled the output that
+was presented when no result was returned. For consistency, this setting has been renamed to `result.indicator.null`
+and can be set as follows:
+
+[source,text]
+----
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> graph.close()
+==>null
+gremlin> :set result.indicator.null nil
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> graph.close()
+==>nil
+gremlin> :set result.indicator.null ""
+gremlin> graph = TinkerGraph.open()
+==>tinkergraph[vertices:0 edges:0]
+gremlin> graph.close()
+gremlin>
+----
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1409[TINKERPOP-1409]
+
 Where Step Supports By-Modulation
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
index 5403ae8..22f5f74 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Preferences.groovy
@@ -73,9 +73,9 @@ public class Preferences {
     public static final String PREF_RESULT_PROMPT_COLOR_DEFAULT = "reset"
     public static String  resultPromptColor = PREF_RESULT_PROMPT_COLOR_DEFAULT
 
-    public static final String PREF_EMPTY_RESULT_IND = "empty.result.indicator"
-    public static final String PREF_EMPTY_RESULT_IND_DEFAULT = "null"
-    public static String  emptyResult = PREF_EMPTY_RESULT_IND_DEFAULT
+    public static final String PREF_RESULT_IND_NULL = "result.indicator.null"
+    public static final String PREF_RESULT_IND_NULL_DEFAULT = "null"
+    public static String  emptyResult = PREF_RESULT_IND_NULL_DEFAULT
 
     public static final String PREF_INPUT_PROMPT = "input.prompt"
     public static final String PREF_INPUT_PROMPT_DEFAULT = "gremlin>"
@@ -212,9 +212,9 @@ public class Preferences {
                             inputPromptColor =  getValidColor(PREF_INPUT_PROMPT_COLOR, evt.newValue, PREF_INPUT_PROMPT_COLOR_DEFAULT)
                         } else if (evt.key == PREF_RESULT_PROMPT_COLOR) {
                             resultPromptColor =  getValidColor(PREF_RESULT_PROMPT_COLOR, evt.newValue, PREF_RESULT_PROMPT_COLOR_DEFAULT)
-                        } else if (evt.key == PREF_EMPTY_RESULT_IND) {
+                        } else if (evt.key == PREF_RESULT_IND_NULL) {
                             if (null == evt.newValue) {
-                                emptyResult =  STORE.get(PREF_EMPTY_RESULT_IND, PREF_EMPTY_RESULT_IND_DEFAULT)
+                                emptyResult =  STORE.get(PREF_RESULT_IND_NULL, PREF_RESULT_IND_NULL_DEFAULT)
                             } else {
                                 emptyResult = evt.newValue
                             }
@@ -285,7 +285,7 @@ public class Preferences {
 
         resultPromptColor =  getValidColor(PREF_RESULT_PROMPT_COLOR, null, PREF_RESULT_PROMPT_COLOR_DEFAULT)
 
-        emptyResult =  STORE.get(PREF_EMPTY_RESULT_IND, PREF_EMPTY_RESULT_IND_DEFAULT)
+        emptyResult =  STORE.get(PREF_RESULT_IND_NULL, PREF_RESULT_IND_NULL_DEFAULT)
 
         inputPrompt =  STORE.get(PREF_INPUT_PROMPT, PREF_INPUT_PROMPT_DEFAULT)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/75b4f204/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
index 4078374..f86042d 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/GremlinSetCommand.groovy
@@ -66,7 +66,7 @@ class GremlinSetCommand extends SetCommand {
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_INFO_COLOR
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_INPUT_PROMPT_COLOR
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_RESULT_PROMPT_COLOR
-            set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_EMPTY_RESULT_IND
+            set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_RESULT_IND_NULL
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_INPUT_PROMPT
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_RESULT_PROMPT
             set << org.apache.tinkerpop.gremlin.console.Preferences.PREF_EDGE_COLOR


[04/50] [abbrv] tinkerpop git commit: minor fix in has(accessor, value, values)

Posted by pi...@apache.org.
minor fix in has(accessor, value, values)


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/95752510
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/95752510
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/95752510

Branch: refs/heads/TINKERPOP-1404
Commit: 957525104c856cb2924d0f690cb59158be52e756
Parents: dea8e84
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 23:13:07 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 23:13:07 2016 +0200

----------------------------------------------------------------------
 .../gremlin/process/traversal/dsl/graph/GraphTraversal.java    | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/95752510/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 1aa5000..d025184 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -972,6 +972,9 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         if (value instanceof Object[]) {
             final Object[] arr = (Object[]) value;
             if (values.length == 0) {
+                if (arr.length == 1) {
+                    return has(accessor, P.eq(arr));
+                }
                 objects = arr;
             } else {
                 objects = new Object[arr.length + values.length];
@@ -979,6 +982,9 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
                 System.arraycopy(values, 0, objects, arr.length, values.length);
             }
         } else {
+            if (values.length == 0) {
+                return has(accessor, value instanceof P ? (P) value : P.eq(value));
+            }
             objects = new Object[values.length + 1];
             objects[0] = value;
             System.arraycopy(values, 0, objects, 1, values.length);


[47/50] [abbrv] tinkerpop git commit: Updated dev docs regarding branching and pull requests CTR

Posted by pi...@apache.org.
Updated dev docs regarding branching and pull requests CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4ed00952
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4ed00952
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4ed00952

Branch: refs/heads/TINKERPOP-1404
Commit: 4ed009525ba3c0bed01fd2331b54ee1dbb76284c
Parents: 75baf01
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 16 10:14:59 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 10:14:59 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc   |  6 +-
 docs/src/dev/developer/for-committers.asciidoc | 83 ++++++++++++++++++---
 2 files changed, 76 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4ed00952/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index 36124f1..63c40b7 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -179,9 +179,9 @@ link:https://github.com/apache/tinkerpop[GitHub repository] if not already done.
 . Make changes in the fork
 .. It is typically best to create a branch for the changes. Consider naming that branch after the JIRA issue number
 to easily track what that branch is for.
-.. Consider which branch to create the branch from in the first place. In other words, is the change to be targetted
-at a specific TinkerPop version (e.g. a patch to an older version)? When in doubt, please ask on
-dev@tinkerpop.apache.org.
+.. Consider which release branch (e.g. `master`, `tp31` etc) to create the development branch from in the first place.
+In other words, is the change to be targetted at a specific TinkerPop version (e.g. a patch to an older version)? When
+in doubt, please ask on dev@tinkerpop.apache.org.
 . Build the project and run tests.
 .. A simple build can be accomplished with maven: `mvn clean install`.
 .. Often, a "simple build" isn't sufficient and integration tests are required:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4ed00952/docs/src/dev/developer/for-committers.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/for-committers.asciidoc b/docs/src/dev/developer/for-committers.asciidoc
index fa88070..9c5059c 100644
--- a/docs/src/dev/developer/for-committers.asciidoc
+++ b/docs/src/dev/developer/for-committers.asciidoc
@@ -60,13 +60,18 @@ change.
 Changes that break the public APIs should be marked with a "breaking" label and should be
 distinguished from other changes in the release notes.
 
+[[branches]]
 Branches
 --------
 
-The "master" branch is used for the main line of development and release branches are constructed as needed
-for ongoing maintenance work. If new to the project or are returning to it after some time away, it may be good
-to send an email to the developer mailing list (or ask on HipChat) to find out what the current operating branches
-are.
+TinkerPop has several release branches:
+
+* `tp30` - 3.0.x (no longer maintained)
+* `tp31` - 3.1.x (bug fixes and documentation updates only)
+* `master` - 3.2.x
+
+Changes to `tp31` should merge to `master`. Please read more about this process in the <<pull-requests, Pull Requests>>
+section.
 
 Other branches may be created for collaborating on features or for RFC's that other developers may want to inspect.
 It is suggested that the JIRA issue ID be used as the prefix, since that triggers certain automation, and it provides a
@@ -200,8 +205,8 @@ Review then Commit
 ------------------
 
 Code modifications must go through a link:http://www.apache.org/foundation/glossary.html#ReviewThenCommit[review-then-committ] (RTC)
-process before being merged into a release branch. All committers should follow the pattern below, where "you" refers to the
-committer wanting to put code into a release branch.
+process before being merged into a release branch. All committers should follow the pattern below, where "you" refers
+to the committer wanting to put code into a release branch.
 
 * Make a JIRA ticket for the software problem you want to solve (i.e. a fix).
 * Fork the release branch that the fix will be put into.
@@ -210,7 +215,7 @@ committer wanting to put code into a release branch.
 * When your fix is complete and ready to merge, issue a link:https://git-scm.com/docs/git-request-pull[pull request].
 ** Be certain that the test suite is passing.
 ** If you updated documentation, be sure that the `process-docs.sh` is building the documentation correctly.
-* Before you can merge your branch into the release branch, you must have at least 3 +1 link:http://www.apache.org/foundation/glossary.html#ConsensusApproval[consensus votes].
+* Before you can merge your branch into the release branch, you must have at least 3 +1 link:http://www.apache.org/foundation/glossary.html#ConsensusApproval[consensus votes] from other committers.
 ** Please see the Apache Software Foundations regulations regarding link:http://www.apache.org/foundation/voting.html#votes-on-code-modification[Voting on Code Modifications].
 * Votes are issued by TinkerPop committers as comments to the pull request.
 * Once 3 +1 votes are received, you are responsible for merging to the release branch and handling any merge conflicts.
@@ -236,10 +241,11 @@ When the committer chooses CTR, it is considered good form to include something
 that CTR was invoked and the reason for doing so.  For example, "Invoking CTR as this change encompasses minor
 adjustments to text formatting."
 
-Pull Request Format
-~~~~~~~~~~~~~~~~~~~
+[[pull-requests]]
+Pull Requests
+~~~~~~~~~~~~~
 
-When you submit a pull request, be sure it uses the following style.
+When submitting a pull request to one of the <<branches, release branches>>, be sure it uses the following style:
 
 * The title of the pull request is the JIRA ticket number + "colon" + the title of the JIRA ticket.
 * The first line of the pull request message should contain a link to the JIRA ticket.
@@ -254,6 +260,63 @@ When you submit a pull request, be sure it uses the following style.
 ** These types of "on merge tweaks" are typically done to extremely dynamic files to combat and merge conflicts.
 * If you are a TinkerPop committer, you can VOTE on your own pull request, so please do so.
 
+A pull request will typically be made to a target <<branches, branch>>. Assuming that branch is upstream of other
+release branches (e.g. a pull request made to for the branch containing 3.1.x must merge to the branch that releases
+3.2.x), it is important to be sure that those changes are merged to the downstream release branches. Typicaly,
+this process is best handled by multiple pull requests: one to each release branch.
+
+As an example, consider a situation where there is a feature branch named "TINKERPOP-1234" that contains a fix for
+the `tp31` branch:
+
+[source,bash]
+----
+`git checkout -b TINKERPOP-1234 tp31`
+// do a bunch of stuff to implement TINKERPOP-1234 and commit/push
+git checkout -b <TINKERPOP-1234-master> master
+git merge TINKERPOP-1234
+----
+
+At this point, there are two branches, with the same set of commits going to `tp31` and `master`. Voting will occur
+on both pull requests. After a successful vote, it is time to merge. If there are no conflicts, then simply `git merge`
+both pull requests to their respective branches. If there are conflicts, then there is some added work to do - time to
+rebase:
+
+[source,bash]
+----
+git checkout TINKERPOP-1234
+git rebase origin/tp31
+----
+
+Depending on the conflict, it might be a good idea to re-test before going any further, otherwise:
+
+[source,bash]
+----
+git push origin TINKERPOP-1234 --force
+----
+
+Now, `git rebase` has re-written the commit history, which makes a mess of the other pull request to master. This
+problem is rectified by essentially re-issuing the PR:
+
+[source,bash]
+----
+git checkout TINKERPOP-1234-master
+git reset --hard origin/master
+git merge TINKERPOP-1234
+----
+
+Again, depending on the changes, it may make sense to re-test at this point, otherwise:
+
+[source,bash]
+----
+git push origin TINKERPOP-1234-master --force
+----
+
+It should not be safe to merge both pull requests to their release branches.
+
+IMPORTANT: Always take a moment to review the commits in a particular pull request. Be sure that they are *all* related
+to the work that was done and that no extraneous commits are present that cannot be explained. Ensuring a pull request
+only contains the expected commits is the responsibility of the committer as well as the reviewer.
+
 [[dependencies]]
 Dependencies
 ------------


[28/50] [abbrv] tinkerpop git commit: Merge branch 'pr-420'

Posted by pi...@apache.org.
Merge branch 'pr-420'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a2ddf8f0
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a2ddf8f0
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a2ddf8f0

Branch: refs/heads/TINKERPOP-1404
Commit: a2ddf8f06bc0b40b7b47dcba2ac1763b5fea93da
Parents: 204da4b 9a6ff99
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 17:35:58 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 17:35:58 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                           | 4 ++--
 docs/src/dev/provider/index.asciidoc                         | 8 ++++----
 docs/src/reference/gremlin-applications.asciidoc             | 2 +-
 docs/src/upgrade/release-3.2.x-incubating.asciidoc           | 2 +-
 .../computer/traversal/step/map/VertexProgramStep.java       | 2 +-
 .../tinkerpop/gremlin/process/remote/RemoteConnection.java   | 2 +-
 6 files changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a2ddf8f0/CHANGELOG.asciidoc
----------------------------------------------------------------------


[05/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by pi...@apache.org.
Merge remote-tracking branch 'origin/tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cf8f6f7d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cf8f6f7d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cf8f6f7d

Branch: refs/heads/TINKERPOP-1404
Commit: cf8f6f7dfbe8da1ed571b0e8bbd259e96b9b4635
Parents: 9575251 d3dd2c1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Sep 13 20:46:01 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Sep 13 20:46:01 2016 -0400

----------------------------------------------------------------------
 docs/src/tutorials/getting-started/index.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cf8f6f7d/docs/src/tutorials/getting-started/index.asciidoc
----------------------------------------------------------------------


[03/50] [abbrv] tinkerpop git commit: reduced complexity by having a single GLOBAL_METHOD_CACHE for both Traversal and TraversalSource methods. Cleaner code with less instanceof stuff.

Posted by pi...@apache.org.
reduced complexity by having a single GLOBAL_METHOD_CACHE for both Traversal and TraversalSource methods. Cleaner code with less instanceof stuff.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1fc52cb2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1fc52cb2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1fc52cb2

Branch: refs/heads/TINKERPOP-1404
Commit: 1fc52cb2d208fb0949e66f2e1cf2c1307495a537
Parents: ed8feea
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 13:34:47 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 13:34:47 2016 -0600

----------------------------------------------------------------------
 .../tinkerpop/gremlin/jsr223/JavaTranslator.java     | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1fc52cb2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index a4f97a1..ed2def2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -42,8 +42,8 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
 
     private final S traversalSource;
     private final Class anonymousTraversal;
-    private static final Map<Class<? extends TraversalSource>, Map<String, List<Method>>> TRAVERSAL_SOURCE_METHOD_CACHE = new ConcurrentHashMap<>();
-    private static final Map<Class<? extends Traversal>, Map<String, List<Method>>> TRAVERSAL_METHOD_CACHE = new ConcurrentHashMap<>();
+    private static final Map<Class<?>, Map<String, List<Method>>> GLOBAL_METHOD_CACHE = new ConcurrentHashMap<>();
+
 
     private JavaTranslator(final S traversalSource) {
         this.traversalSource = traversalSource;
@@ -105,9 +105,7 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
         //////////////////////////
         //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
-        final Map<String, List<Method>> methodCache = delegate instanceof TraversalSource ?
-                TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
-                TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
+        final Map<String, List<Method>> methodCache = GLOBAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
         if (methodCache.isEmpty()) {
             for (final Method method : delegate.getClass().getMethods()) {
                 if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|
@@ -119,10 +117,7 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
                     list.add(method);
                 }
             }
-            if (delegate instanceof TraversalSource)
-                TRAVERSAL_SOURCE_METHOD_CACHE.put((Class<TraversalSource>) delegate.getClass(), methodCache);
-            else
-                TRAVERSAL_METHOD_CACHE.put((Class<Traversal>) delegate.getClass(), methodCache);
+            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
         }
         //////////////////////////
         //////////////////////////
@@ -133,7 +128,7 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
             if (arguments[i] instanceof Bytecode.Binding)
                 argumentsCopy[i] = ((Bytecode.Binding) arguments[i]).value();
             else if (arguments[i] instanceof Bytecode)
-                argumentsCopy[i] = translateFromAnonymous((Bytecode) arguments[i]);
+                argumentsCopy[i] = this.translateFromAnonymous((Bytecode) arguments[i]);
             else
                 argumentsCopy[i] = arguments[i];
         }


[06/50] [abbrv] tinkerpop git commit: Minor formatting fixes to dev docs CTR

Posted by pi...@apache.org.
Minor formatting fixes to dev docs CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d4d8297f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d4d8297f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d4d8297f

Branch: refs/heads/TINKERPOP-1404
Commit: d4d8297f5e4a2b05aaae78d4db42f18daed086e6
Parents: cf8f6f7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 10:47:10 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 10:47:10 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/development-environment.asciidoc | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d4d8297f/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index d6fc9a7..117f792 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -106,7 +106,7 @@ Building and Testing
 The following commands are a mix of Maven flags and shell scripts that handle different build operations
 
 * Build project: `mvn clean install`
-* Build a specific module (e.g. `gremlin-python`) within the project: `mvn clean install -pl gremlin-python`
+** Build a specific module (e.g. `gremlin-server`) within the project: `mvn clean install -pl gremlin-server`
 ** Specify specific tests in a TinkerPop Suite to run with the `GREMLIN_TESTS` environment variable, along with the
 Maven project list argument, e.g.:
 +
@@ -117,7 +117,7 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Clean the `.groovy/grapes/org.apache.tinkerpop` directory on build: `mvn clean install -DcleanGrapes`
 ** Turn off "heavy" logging in the "process" tests: `mvn clean install -DargLine="-DmuteTestLogs=true"`
 ** The test suite for `neo4j-gremlin` is disabled by default - to turn it on: `mvn clean install -DincludeNeo4j`
-** Build the `gremlin-python` module with native Python tests (which require that Python be installed on the system): `mvn clean install -DglvPython`
+** Build and execute with native Python tests (see <<python-environment,Python Environment>>: `mvn clean install -DglvPython`
 * Regenerate test data (only necessary given changes to IO classes): `mvn clean install -Dio` from `tinkergraph-gremlin` directory
 ** If there are changes to the Gryo format, it may be necessary to generate the Grateful Dead dataset from GraphSON (see `IoDataGenerationTest.shouldWriteGratefulDead`)
 * Check license headers are present: `mvn apache-rat:check`
@@ -135,7 +135,6 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Execute with the `-DuseEpoll` option to try to use Netty native transport (works on Linux, but will fallback to Java NIO on other OS).
 * Performance Tests: `mvn verify -DskipPerformanceTests=false`
 * Benchmarks: `mvn verify -DskipBenchmarks=false`
-* Build and execute with native Python tests (see <<python-environment,Python Environment>>: `mvn clean install -DglvPython`
 
 [[docker-integration]]
 Docker Integration


[33/50] [abbrv] tinkerpop git commit: per @spmallette's request, added where().by() to the upgrading user-docs.

Posted by pi...@apache.org.
per @spmallette's request, added where().by() to the upgrading user-docs.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8febc4da
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8febc4da
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8febc4da

Branch: refs/heads/TINKERPOP-1404
Commit: 8febc4dac44c893dc263a4ca5fd340f4bf7b4d94
Parents: fe21ce1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 07:58:09 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 .../upgrade/release-3.2.x-incubating.asciidoc   | 27 ++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8febc4da/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 61e3a58..2cf8ef2 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -29,6 +29,33 @@ TinkerPop 3.2.3
 
 Please see the link:https://github.com/apache/tinkerpop/blob/3.2.3/CHANGELOG.asciidoc#release-3-2-3[changelog] for a complete list of all the modifications that are part of this release.
 
+Upgrading for Users
+~~~~~~~~~~~~~~~~~~~
+
+Where Step Supports By-Modulation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+It is now possible to use `by()` with `where()` predicate-based steps. Previously, without using `match()`, if you wanted
+to know who was older than their friend, the following traversal would be used.
+
+[source,text]
+----
+gremlin> g.V().as('a').out('knows').as('b').
+......1>   filter(select('a','b').by('age').where('a', lt('b')))
+==>v[4]
+----
+
+Now, with `where().by()` support, the above traversal can be expressed more succinctly and more naturally as follows.
+
+[source,text]
+----
+gremlin> g.V().as('a').out('knows').as('b').
+......1>   where('a', lt('b')).by('age')
+==>v[4]
+----
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1330[TINKERPOP-1330]
+
 TinkerPop 3.2.2
 ---------------
 


[36/50] [abbrv] tinkerpop git commit: Print no result line if empty.result.indicator is empty string.

Posted by pi...@apache.org.
Print no result line if empty.result.indicator is empty string.

This seems like a better use of the empty string setting than to actually just print an empty string line.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6599159b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6599159b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6599159b

Branch: refs/heads/TINKERPOP-1404
Commit: 6599159bb861fda3464f2004fc2512bf85ca40c9
Parents: 687ae74
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 12:30:04 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 12:30:04 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                               |  1 +
 docs/src/reference/gremlin-applications.asciidoc |  3 ++-
 .../tinkerpop/gremlin/console/Console.groovy     | 19 ++++++++++++++-----
 3 files changed, 17 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6599159b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 3b1e4b6..15e1bb2 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -32,6 +32,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 * `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
+* If `empty.result.indicator` is set to an empty string, then no "result line" is printed in the console.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
 * New build options for `gremlin-python` where `-DglvPython` is no longer required.
 * Added missing `InetAddress` to GraphSON extension module.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6599159b/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 1a0fd16..13ac6ff 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -173,7 +173,8 @@ Preferences are set with `:set name value`.  Values can contain spaces when quot
 |result.prompt.color | colors | Color of the result prompt.
 |input.prompt | string | Text of the input prompt.
 |result.prompt | string | Text of the result prompt.
-|empty.result.indicator | string | Text of the void/no results indicator.
+|empty.result.indicator | string | Text of the void/no results indicator - setting to empty string (i.e. "" at the
+command line) will print no result line in these cases.
 |=========================================================
 
 Colors can contain a comma-separated combination of 1 each of foreground, background, and attribute.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6599159b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index eeda56d..19ae3c4 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -199,10 +199,7 @@ class Console {
             if (this.tempIterator.hasNext()) {
                 int counter = 0;
                 while (this.tempIterator.hasNext() && (Preferences.maxIteration == -1 || counter < Preferences.maxIteration)) {
-                    final Object object = this.tempIterator.next()
-                    String prompt = Colorizer.render(Preferences.resultPromptColor, buildResultPrompt())
-                    String colorizedResult = colorizeResult(object)
-                    io.out.println(prompt + ((null == object) ? Preferences.emptyResult : colorizedResult))
+                    printResult(tempIterator.next())
                     counter++;
                 }
                 if (this.tempIterator.hasNext())
@@ -250,7 +247,7 @@ class Console {
                         io.out.println(Colorizer.render(Preferences.resultPromptColor,(buildResultPrompt() + result.prettyPrint(width < 20 ? 80 : width))))
                         return null
                     } else {
-                        io.out.println(Colorizer.render(Preferences.resultPromptColor,buildResultPrompt()).toString() + ((null == result) ? Preferences.emptyResult : colorizeResult(result)))
+                        printResult(result)
                         return null
                     }
                 } catch (final Exception e) {
@@ -261,6 +258,18 @@ class Console {
         }
     }
 
+    def printResult(def object) {
+        final String prompt = Colorizer.render(Preferences.resultPromptColor, buildResultPrompt())
+        // if preference is set to empty string then don't print any result
+        if (object != null) {
+            io.out.println(prompt + colorizeResult(object))
+        } else {
+            if (!Preferences.emptyResult.isEmpty()) {
+                io.out.println(prompt + Preferences.emptyResult)
+            }
+        }
+    }
+
     def colorizeResult = { object ->
         if (object instanceof Vertex) {
             return Colorizer.render(Preferences.vertexColor, object.toString())


[02/50] [abbrv] tinkerpop git commit: removed this. from a static field name call. minor nothing.

Posted by pi...@apache.org.
removed this. from a static field name call. minor nothing.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ed8feea5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ed8feea5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ed8feea5

Branch: refs/heads/TINKERPOP-1404
Commit: ed8feea52e2055edcd45cd5c97f8ef3d60cc6820
Parents: 2a2b59b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 13:30:27 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 13:30:27 2016 -0600

----------------------------------------------------------------------
 .../java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ed8feea5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index d00ad1c..a4f97a1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -106,8 +106,8 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
         //////////////////////////
         // populate method cache for fast access to methods in subsequent calls
         final Map<String, List<Method>> methodCache = delegate instanceof TraversalSource ?
-                this.TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
-                this.TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
+                TRAVERSAL_SOURCE_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>()) :
+                TRAVERSAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
         if (methodCache.isEmpty()) {
             for (final Method method : delegate.getClass().getMethods()) {
                 if (!(method.getName().equals("addV") && method.getParameterCount() == 1 && method.getParameters()[0].getType().equals(Object[].class))) { // hack cause its hard to tell Object[] vs. String :|


[37/50] [abbrv] tinkerpop git commit: Merge branch 'TINKERPOP-1391' into tp31

Posted by pi...@apache.org.
Merge branch 'TINKERPOP-1391' into tp31


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e7e74815
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e7e74815
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e7e74815

Branch: refs/heads/TINKERPOP-1404
Commit: e7e748151da513850567395d376e02e4cda864a2
Parents: 146f36f 5ff97ef
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 20:08:39 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 20:08:39 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  3 ++-
 .../optimization/RangeByIsCountStrategy.java    | 20 +++++++++++++++++---
 .../RangeByIsCountStrategyTest.java             |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e7e74815/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 646e496,f01966d..4d990ee
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,8 -26,9 +26,9 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
- + Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
++* Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
+ * Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.
  
 -
  [[release-3-1-4]]
  TinkerPop 3.1.4 (Release Date: September 6, 2016)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[23/50] [abbrv] tinkerpop git commit: Fix multiple occurrences of 'the'

Posted by pi...@apache.org.
Fix multiple occurrences of 'the'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9a6ff997
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9a6ff997
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9a6ff997

Branch: refs/heads/TINKERPOP-1404
Commit: 9a6ff9976170da6e6422317db31dd318b84d14b3
Parents: cedbe9c
Author: Mark Hoekstra <ma...@web-iq.eu>
Authored: Thu Sep 15 13:52:47 2016 +0200
Committer: Mark Hoekstra <ma...@web-iq.eu>
Committed: Thu Sep 15 13:52:47 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                        |  4 ++--
 docs/src/dev/developer/contributing.asciidoc              |  4 ++--
 docs/src/dev/provider/index.asciidoc                      |  8 ++++----
 docs/src/reference/gremlin-applications.asciidoc          |  2 +-
 docs/src/reference/implementations-hadoop.asciidoc        |  2 +-
 docs/src/reference/implementations-tinkergraph.asciidoc   |  2 +-
 docs/src/reference/intro.asciidoc                         |  2 +-
 docs/src/reference/the-traversal.asciidoc                 | 10 +++++-----
 docs/src/upgrade/index.asciidoc                           |  2 +-
 docs/src/upgrade/release-3.2.x-incubating.asciidoc        |  2 +-
 .../tinkerpop/gremlin/process/computer/MapReduce.java     |  2 +-
 .../computer/traversal/step/map/VertexProgramStep.java    |  2 +-
 .../gremlin/process/remote/RemoteConnection.java          |  2 +-
 .../java/org/apache/tinkerpop/gremlin/driver/Cluster.java |  2 +-
 .../tinkerpop/gremlin/driver/LoadBalancingStrategy.java   |  2 +-
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java  |  2 +-
 .../tinkerpop/gremlin/server/AbstractChannelizer.java     |  2 +-
 .../process/computer/util/ComputerSubmissionHelper.java   |  2 +-
 .../tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java     |  2 +-
 19 files changed, 28 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index b359f37..87c51cf 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -43,7 +43,7 @@ This release also includes changes from <<release-3-1-4, 3.1.4>>.
 * Created an experimental GraphSON representation of `Bytecode` that will be considered unstable until 3.3.0.
 * Added `Translator` which allows from the translation of `Bytecode` into some other form (e.g. script, `Traversal`, etc.).
 * Added `JavaTranslator`, `GroovyTranslator`, `PythonTranslator`, and `JythonTranslator` for translating `Bytecode` accordingly.
-* Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the the process test suite.
+* Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the process test suite.
 * Added `Traversal.Admin.nextTraverser()` to get the next result in bulk-form (w/ default implementation).
 * Added `TraversalSource.getAnonymousTraversalClass()` (w/ default implementation).
 * Added `GremlinScriptEngine` interface which specifies a `eval(Bytecode, Bindings)` method.
@@ -667,7 +667,7 @@ TinkerPop 3.1.1 (Release Date: February 8, 2016)
 * Added `Spark` static object to allow "file system" control of persisted RDDs in Spark.
 * Added a Spark "job server" to ensure that persisted RDDs are not garbage collected by Spark.
 * Improved logging control during builds with Maven.
-* Fixed settings that weren't being passed to the the Gremlin Driver `Cluster` through configuration file.
+* Fixed settings that weren't being passed to the Gremlin Driver `Cluster` through configuration file.
 * `Column` now implements `Function`. The modulator `by(valueDecr)` can be replaced by `by(values,decr)` and thus, projection and order are separated.
 * Added `InputRDDFormat` which wraps an `InputRDD` to make it accessible to Hadoop and not just Spark.
 * Added `AbstractSparkTest` which handles closing `SparkContext` instances between tests now that we support persisted contexts.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index 0c121c8..36124f1 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -27,7 +27,7 @@ Ways to Contribute
 image:gremlin-apache.png[width=250,float=left] While the concept of an open source contribution can refer to doing
 development work on the code base, there are many other ways outside of coding to contribute to Apache TinkerPop.
 Participating on the various mailing lists, offering ideas, reporting bugs, writing documentation are all welcome
-contributions to the project that help improve the The TinkerPop. This section of the document is designed to help
+contributions to the project that help improve the TinkerPop. This section of the document is designed to help
 provide some structure for potential contributors and to give them ideas for how they could get started becoming more
 involved in the TinkerPop community.
 
@@ -112,7 +112,7 @@ Before proceeding, contributors should evaluate if the proposed change is likely
 
 * Is it clear that code must change? Proposing a JIRA issue and pull request is appropriate only when a clear problem
 or change has been identified. When in doubt, email dev@tinkerpop.apache.org first about the possible change.
-* Search the the mailing list archives for related discussions. Often, the problem has been discussed before, with
+* Search the mailing list archives for related discussions. Often, the problem has been discussed before, with
 a resolution that doesn't require a code change, or recording what kinds of changes will not be accepted as a
 resolution.
 * Search link:https://issues.apache.org/jira/browse/TINKERPOP[JIRA] for existing issues.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index 09dd9fb..bb41241 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -116,7 +116,7 @@ Implementing GraphComputer
 
 image:furnace-character-3.png[width=150,float=right] The most complex method in GraphComputer is the `submit()`-method. The method must do the following:
 
-. Ensure the the GraphComputer has not already been executed.
+. Ensure the GraphComputer has not already been executed.
 . Ensure that at least there is a VertexProgram or 1 MapReduce job.
 . If there is a VertexProgram, validate that it can execute on the GraphComputer given the respectively defined features.
 . Create the Memory to be used for the computation.
@@ -287,7 +287,7 @@ for (final MapReduce mapReduce : mapReducers) {
 
 <1> Note that the final results of the reducer are provided to the Memory as specified by the application developer's
 `MapReduce.addResultToMemory()` implementation.
-<2> If there is no reduce stage, the the map-stage results are inserted into Memory as specified by the application
+<2> If there is no reduce stage, the map-stage results are inserted into Memory as specified by the application
 developer's `MapReduce.addResultToMemory()` implementation.
 
 Hadoop-Gremlin Usage
@@ -329,7 +329,7 @@ GraphFilterAware Interface
 ++++++++++++++++++++++++++
 
 <<graph-filter,Graph filters>> by OLAP processors to only pull a subgraph of the full graph from the graph data source. For instance, the
-example below constructs a `GraphFilter` that will only pull the the "knows"-graph amongst people into the `GraphComputer`
+example below constructs a `GraphFilter` that will only pull the "knows"-graph amongst people into the `GraphComputer`
 for processing.
 
 [source,java]
@@ -912,7 +912,7 @@ Unlike Standard and Session OpProcessors, the Traversal OpProcessor does not sim
 `Traversal`. It instead returns `Traverser` objects which allows the client to take advantage of
 link:http://tinkerpop.apache.org/docs/current/reference/#barrier-step[bulking]. To describe this interaction more
 directly, the returned `Traverser` will represent some value from the `Traversal` result and the number of times it
-is represented in the the full stream of results. So, if a `Traversal` happens to return the same vertex twenty times
+is represented in the full stream of results. So, if a `Traversal` happens to return the same vertex twenty times
 it won't return twenty instances of the same object. It will return one in `Traverser` with the `bulk` value set to
 twenty. Under this model, the amount of processing and network overhead can be reduced considerably.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 4c01096..1a0fd16 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -1253,7 +1253,7 @@ There are a number of pre-packaged `CustomizerProvider` implementations:
 |=========================================================
 |Customizer |Description
 |`CompileStaticCustomizerProvider` |Applies `CompileStatic` annotations to incoming scripts thus removing dynamic dispatch. More information about static compilation can be found in the link:http://docs.groovy-lang.org/latest/html/documentation/#_static_compilation[Groovy Documentation].  It is possible to configure this `CustomizerProvider` by specifying a comma separated list of link:http://docs.groovy-lang.org/latest/html/documentation/#Typecheckingextensions-Workingwithextensions[type checking extensions] that can have the effect of securing calls to various methods.
-|`ConfigurationCustomizerProvider` |Allows configuration of the the Groovy `CompilerConfiguration` object by taking a `Map` of key/value pairs where the "key" is a property to set on the `CompilerConfiguration`.
+|`ConfigurationCustomizerProvider` |Allows configuration of the Groovy `CompilerConfiguration` object by taking a `Map` of key/value pairs where the "key" is a property to set on the `CompilerConfiguration`.
 |`ThreadInterruptCustomizerProvider` |Injects checks for thread interruption, thus allowing the thread to potentially respect calls to `Thread.interrupt()`
 |`TimedInterruptCustomizerProvider` |Injects checks into loops to interrupt them if they exceed the configured timeout in milliseconds.
 |`TypeCheckedCustomizerProvider` |Similar to the above mentioned, `CompileStaticCustomizerProvider`, the `TypeCheckedCustomizerProvider` injects `TypeChecked` annotations to incoming scripts.  More information on the nature of this annotation can be found in the link:http://docs.groovy-lang.org/latest/html/documentation/#_the_code_typechecked_code_annotation[Groovy Documentation].  It too takes a comma separated list of link:http://docs.groovy-lang.org/latest/html/documentation/#Typecheckingextensions-Workingwithextensions[type checking extensions].

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-hadoop.asciidoc b/docs/src/reference/implementations-hadoop.asciidoc
index 34e6f67..3416ea8 100644
--- a/docs/src/reference/implementations-hadoop.asciidoc
+++ b/docs/src/reference/implementations-hadoop.asciidoc
@@ -272,7 +272,7 @@ specified in `HADOOP_GREMLIN_LIBS`.
 export HADOOP_GREMLIN_LIBS=$HADOOP_GREMLIN_LIBS:/usr/local/gremlin-console/ext/spark-gremlin/lib
 
 Furthermore the `lib/` directory should be distributed across all machines in the SparkServer cluster. For this purpose TinkerPop
-provides a helper script, which takes the Spark installation directory and the the Spark machines as input:
+provides a helper script, which takes the Spark installation directory and the Spark machines as input:
 
 [source,shell]
 bin/hadoop/init-tp-spark.sh /usr/local/spark spark@10.0.0.1 spark@10.0.0.2 spark@10.0.0.3

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/implementations-tinkergraph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index aadec06..33c4dbf 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -96,7 +96,7 @@ TinkerGraph has several settings that can be provided on creation via `Configura
 |gremlin.tinkergraph.vertexPropertyIdManager |The `IdManager` implementation to use for vertex properties.
 |gremlin.tinkergraph.defaultVertexPropertyCardinality |The default `VertexProperty.Cardinality` to use when `Vertex.property(k,v)` is called.
 |gremlin.tinkergraph.graphLocation |The path and file name for where TinkerGraph should persist the graph data. If a
-value is specified here, the the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
+value is specified here, the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
 included (default), then the graph will stay in-memory and not be loaded/persisted to disk.
 |gremlin.tinkergraph.graphFormat |The format to use to serialize the graph which may be one of the following:
 `graphml`, `graphson`, `gryo`, or a fully qualified class name that implements Io.Builder interface (which allows for

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index f7a32ce..c7d8882 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -298,7 +298,7 @@ g.V(marko).out('knows') <2>
 g.V(marko).out('knows').values('name') <3>
 ----
 
-<1> Set the variable `marko` to the the vertex in the graph `g` named "marko".
+<1> Set the variable `marko` to the vertex in the graph `g` named "marko".
 <2> Get the vertices that are outgoing adjacent to the marko-vertex via knows-edges.
 <3> Get the names of the marko-vertex's friends.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 34e6b4d..f7064fd 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -307,7 +307,7 @@ g.V().hasLabel('software').as('a','b','c').
 Barrier Step
 ~~~~~~~~~~~~
 
-The `barrier()`-step (*barrier*) turns the the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
+The `barrier()`-step (*barrier*) turns the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
 useful in the following situations:
 
   * When everything prior to `barrier()` needs to be executed before moving onto the steps after the `barrier()` (i.e. ordering).
@@ -742,7 +742,7 @@ g.V().has('name',not(within('josh','marko'))).valueMap() <5>
 
 <1> Find all vertices whose ages are between 20 (inclusive) and 30 (exclusive).
 <2> Find all vertices whose ages are not between 20 (inclusive) and 30 (exclusive).
-<3> Find all vertices whose names are exact matches to any names in the the collection `[josh,marko]`, display all
+<3> Find all vertices whose names are exact matches to any names in the collection `[josh,marko]`, display all
 the key,value pairs for those verticies.
 <4> Find all vertices whose names are not in the collection `[josh,marko]`, display all the key,value pairs for those vertices.
 <5> Same as the prior example save using `not` on `within` to yield `without`.
@@ -851,7 +851,7 @@ in a object-local traversal. As such, the `order().by()` and the `limit()` refer
 stream as a whole.
 
 WARNING: The anonymous traversal of `local()` processes the current object "locally." In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
 the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or edges.
 
 [[match-step]]
@@ -1628,7 +1628,7 @@ g.V(1).repeat(out()).until(outE().count().is(0)).path().by('name') <3>
 <3> Starting from vertex 1, keep taking outgoing edges until a vertex is reached that has no more outgoing edges.
 
 WARNING: The anonymous traversal of `emit()` and `until()` (not `repeat()`) process their current objects "locally."
-In OLAP, where the atomic unit of computing is the the vertex and its local "star graph," it is important that the
+In OLAP, where the atomic unit of computing is the vertex and its local "star graph," it is important that the
 anonymous traversals do not leave the confines of the vertex's star graph. In other words, they can not traverse to
 an adjacent vertex's properties or edges.
 
@@ -2200,7 +2200,7 @@ g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
 <6> The concatenation of `where()`-steps is the same as a single `where()`-step with an and'd clause.
 
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
 the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or
 edges. Note that is only a temporary limitation that will be addressed in a future version of TinkerPop3 (see
 link:https://issues.apache.org/jira/browse/TINKERPOP-693[TINKERPOP-693]).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/index.asciidoc b/docs/src/upgrade/index.asciidoc
index 59dd5e1..a12442b 100644
--- a/docs/src/upgrade/index.asciidoc
+++ b/docs/src/upgrade/index.asciidoc
@@ -24,7 +24,7 @@ TinkerPop Upgrade Information
 This document helps users of TinkerPop to understand the changes that come with each software release.  It outlines
 new features, how to resolve breaking changes and other information specific to a release.  This document is useful
 to end-users who are building applications on TinkerPop, but it is equally useful to TinkerPop providers, who
-build libraries and other systems on the the core APIs and protocols that TinkerPop exposes.
+build libraries and other systems on the core APIs and protocols that TinkerPop exposes.
 
 These providers include:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 873cdc8..61e3a58 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -353,7 +353,7 @@ Hadoop FileSystem Variable
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 The `HadoopGremlinPlugin` defines two variables: `hdfs` and `fs`. The first is a reference to the HDFS `FileSystemStorage`
-and the latter is a reference to the the local `FileSystemStorage`. Prior to 3.2.x, `fs` was called `local`. However,
+and the latter is a reference to the local `FileSystemStorage`. Prior to 3.2.x, `fs` was called `local`. However,
 there was a variable name conflict with `Scope.local`. As such `local` is now `fs`. This issue existed prior to 3.2.x,
 but was not realized until this release. Finally, this only effects Gremlin Console users.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
index f6e6c0c..a70abf3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
@@ -33,7 +33,7 @@ import java.util.Optional;
  * The map() stage processes the vertices of the {@link org.apache.tinkerpop.gremlin.structure.Graph} in a logically parallel manner.
  * The combine() stage aggregates the values of a particular map emitted key prior to sending across the cluster.
  * The reduce() stage aggregates the values of the combine/map emitted keys for the keys that hash to the current machine in the cluster.
- * The interface presented here is nearly identical to the interface popularized by Hadoop save the the map() is over the vertices of the graph.
+ * The interface presented here is nearly identical to the interface popularized by Hadoop save the map() is over the vertices of the graph.
  *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
index bda19a2..d005940 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -79,7 +79,7 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
             }
         } catch (final InterruptedException ie) {
             // the thread running the traversal took an interruption while waiting on the call the future.get().
-            // the future should then be cancelled with interruption so that the the GraphComputer that created
+            // the future should then be cancelled with interruption so that the GraphComputer that created
             // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
             // cancellation request.
             if (future != null) future.cancel(true);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
index f2cc399..8506ad7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
@@ -45,7 +45,7 @@ public interface RemoteConnection extends AutoCloseable {
     /**
      * Submits {@link Traversal} {@link Bytecode} to a server and returns a {@link Traversal}.
      * The {@link Traversal} is an abstraction over two types of results that can be returned as part of the
-     * response from the server: the results of the {@link Traversal} itself and the the side-effects that it produced.
+     * response from the server: the results of the {@link Traversal} itself and the side-effects that it produced.
      */
     public <E> RemoteTraversal<?,E> submit(final Bytecode bytecode) throws RemoteConnectionException;
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index c7ea041..9c08c3c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -254,7 +254,7 @@ public final class Cluster {
 
     /**
      * Gets the list of hosts that the {@code Cluster} was able to connect to.  A {@link Host} is assumed unavailable
-     * until a connection to it is proven to be present.  This will not happen until the the {@link Client} submits
+     * until a connection to it is proven to be present.  This will not happen until the {@link Client} submits
      * requests that succeed in reaching a server at the {@link Host} or {@link Client#init()} is called which
      * initializes the {@link ConnectionPool} for the {@link Client} itself.  The number of available hosts returned
      * from this method will change as different servers come on and offline.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
index b485911..c6ad4bd 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
@@ -41,7 +41,7 @@ public interface LoadBalancingStrategy extends Host.Listener {
     public void initialize(final Cluster cluster, final Collection<Host> hosts);
 
     /**
-     * Provide an ordered list of hosts to send the the given {@link RequestMessage} to.
+     * Provide an ordered list of hosts to send the given {@link RequestMessage} to.
      */
     public Iterator<Host> select(final RequestMessage msg);
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
index 8866325..ecfd168 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
@@ -405,7 +405,7 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
     private void internalReset() {
         createClassLoader();
 
-        // must clear the local cache here because the the classloader has been reset.  therefore, classes previously
+        // must clear the local cache here because the classloader has been reset.  therefore, classes previously
         // referenced before that might not have evaluated might cleanly evaluate now.
         classMap.clear();
         globalClosures.clear();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
index 10dbc1c..fdedd31 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
@@ -55,7 +55,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.stream.Stream;
 
 /**
- * A base implementation for the {@code Channelizer} which does a basic configuration of the the pipeline, one that
+ * A base implementation for the {@code Channelizer} which does a basic configuration of the pipeline, one that
  * is generally common to virtually any Gremlin Server operation (i.e. where the server's purpose is to process
  * Gremlin scripts).
  * <p/>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
index 2f4625f..1229440 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
@@ -39,7 +39,7 @@ public final class ComputerSubmissionHelper {
      * <p>
      * This is intended to serve as an alternative to {@link ForkJoinPool#commonPool()},
      * which is used by {@link CompletableFuture#supplyAsync(Supplier)} (among other methods).
-     * The the single threaded executor created by this method contains a thread
+     * The single threaded executor created by this method contains a thread
      * with the same context classloader and thread group as the thread that called
      * this method.  Threads created in this method also have predictable behavior when
      * {@link Thread#setContextClassLoader(ClassLoader)} is invoked; threads in the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a6ff997/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
index 6f896af..d5460c7 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
@@ -270,7 +270,7 @@ public final class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
     }
 
     /**
-     * This implementation of {@code close} will also close the current transaction on the the thread, but it
+     * This implementation of {@code close} will also close the current transaction on the thread, but it
      * is up to the caller to deal with dangling transactions in other threads prior to calling this method.
      */
     @Override


[29/50] [abbrv] tinkerpop git commit: added where().by() semantics to Gremlin and fixed a severe bug in Gremlin-Python's P object. Optimized TraversalRing for non-existent modulators.

Posted by pi...@apache.org.
added where().by() semantics to Gremlin and fixed a severe bug in Gremlin-Python's P object. Optimized TraversalRing for non-existent modulators.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/68ecda40
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/68ecda40
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/68ecda40

Branch: refs/heads/TINKERPOP-1404
Commit: 68ecda40486650cb9f209b61570485d3c24eed37
Parents: a2ddf8f
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Sep 14 15:30:34 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 09:58:53 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   4 +
 .../step/filter/WherePredicateStep.java         |  54 ++++++++--
 .../process/traversal/step/map/PathStep.java    |   2 +-
 .../process/traversal/step/map/ProjectStep.java |   2 +-
 .../process/traversal/step/map/SelectStep.java  |   2 +-
 .../process/traversal/step/map/TreeStep.java    |   2 +-
 .../step/sideEffect/TreeSideEffectStep.java     |   2 +-
 .../process/traversal/util/TraversalRing.java   |   2 +-
 .../traversal/step/filter/WhereStepTest.java    |   6 +-
 .../step/filter/GroovyWhereTest.groovy          |  15 +++
 .../python/TraversalSourceGenerator.groovy      |   8 +-
 .../gremlin/python/jsr223/PythonTranslator.java |   2 +-
 .../jython/gremlin_python/process/traversal.py  |   8 +-
 .../main/jython/tests/process/test_traversal.py |   8 ++
 .../jython/tests/structure/io/test_graphson.py  |   5 +
 .../io/graphson/GraphSONWriterTest.java         |   2 +-
 .../traversal/step/filter/WhereTest.java        | 104 ++++++++++++++++---
 17 files changed, 188 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index cf1cae8..2210ecf 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,10 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the predicates.
+* Fixed a naming bug in Gremlin-Python where `P._and` and `P._or` should be `P.and_` and `P.or_`. (*breaking*)
+* `where()` predicate-based steps now support `by()`-modulation.
+* `TraversalRing` returns an null if it does not contain traversals (previously `IdentityTraversal`).
 * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
 * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 * VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
index 898a42a..05637f6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
@@ -22,19 +22,30 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
 import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class WherePredicateStep<S> extends FilterStep<S> implements Scoping, PathProcessor {
+public final class WherePredicateStep<S> extends FilterStep<S> implements Scoping, PathProcessor, ByModulating, TraversalParent {
 
     protected String startKey;
     protected List<String> selectKeys;
@@ -42,6 +53,8 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     protected final Set<String> scopeKeys = new HashSet<>();
     protected Set<String> keepLabels;
 
+    protected TraversalRing<S, ?> traversalRing = new TraversalRing<>();
+
     public WherePredicateStep(final Traversal.Admin traversal, final Optional<String> startKey, final P<String> predicate) {
         super(traversal);
         this.startKey = startKey.orElse(null);
@@ -66,7 +79,7 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
         if (predicate instanceof ConnectiveP)
             ((ConnectiveP<Object>) predicate).getPredicates().forEach(p -> this.setPredicateValues(p, traverser, selectKeysIterator));
         else
-            predicate.setValue(this.getScopeValue(Pop.last, selectKeysIterator.next(), traverser));
+            predicate.setValue(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, selectKeysIterator.next(), traverser), this.traversalRing.next()));
     }
 
     public Optional<P<?>> getPredicate() {
@@ -84,14 +97,18 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
 
     @Override
     protected boolean filter(final Traverser.Admin<S> traverser) {
+        final Object value = null == this.startKey ?
+                TraversalUtil.applyNullable(traverser, this.traversalRing.next()) :
+                TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, this.startKey, traverser), this.traversalRing.next());
         this.setPredicateValues(this.predicate, traverser, this.selectKeys.iterator());
-        return this.predicate.test(null == this.startKey ? traverser.get() : this.getScopeValue(Pop.last, this.startKey, traverser));
+        this.traversalRing.reset();
+        return this.predicate.test(value);
     }
 
     @Override
     public String toString() {
         // TODO: revert the predicates to their string form?
-        return StringFactory.stepString(this, this.startKey, this.predicate);
+        return StringFactory.stepString(this, this.startKey, this.predicate, this.traversalRing);
     }
 
     @Override
@@ -103,19 +120,33 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     public WherePredicateStep<S> clone() {
         final WherePredicateStep<S> clone = (WherePredicateStep<S>) super.clone();
         clone.predicate = this.predicate.clone();
+        clone.traversalRing = this.traversalRing.clone();
         return clone;
     }
 
     @Override
+    public void setTraversal(final Traversal.Admin<?, ?> parentTraversal) {
+        super.setTraversal(parentTraversal);
+        this.traversalRing.getTraversals().forEach(this::integrateChild);
+    }
+
+    @Override
     public int hashCode() {
-        return super.hashCode() ^ (null == this.startKey ? "null".hashCode() : this.startKey.hashCode()) ^ this.predicate.hashCode();
+        return super.hashCode() ^ this.traversalRing.hashCode() ^ (null == this.startKey ? "null".hashCode() : this.startKey.hashCode()) ^ this.predicate.hashCode();
     }
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        return TraversalHelper.getLabels(TraversalHelper.getRootTraversal(this.traversal)).stream().filter(this.scopeKeys::contains).findAny().isPresent() ?
-                TYPICAL_GLOBAL_REQUIREMENTS :
-                TYPICAL_LOCAL_REQUIREMENTS;
+        final Set<TraverserRequirement> requirements =
+                TraversalHelper.getLabels(TraversalHelper.getRootTraversal(this.traversal)).stream().filter(this.scopeKeys::contains).findAny().isPresent() ?
+                        TYPICAL_GLOBAL_REQUIREMENTS :
+                        TYPICAL_LOCAL_REQUIREMENTS;
+        return this.getSelfAndChildRequirements(requirements.toArray(new TraverserRequirement[requirements.size()]));
+    }
+
+    @Override
+    public List<Traversal.Admin<S, ?>> getLocalChildren() {
+        return (List) this.traversalRing.getTraversals();
     }
 
     @Override
@@ -132,4 +163,9 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     public Set<String> getKeepLabels() {
         return this.keepLabels;
     }
+
+    @Override
+    public void modulateBy(final Traversal.Admin<?, ?> traversal) throws UnsupportedOperationException {
+        this.traversalRing.addTraversal(this.integrateChild(traversal));
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
index 6dca028..705cf0c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
@@ -53,7 +53,7 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
             path = traverser.path();
         else {
             path = MutablePath.make();
-            traverser.path().forEach((object, labels) -> path.extend(TraversalUtil.apply(object, this.traversalRing.next()), labels));
+            traverser.path().forEach((object, labels) -> path.extend(TraversalUtil.applyNullable(object, this.traversalRing.next()), labels));
         }
         this.traversalRing.reset();
         return path;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
index 2e586b7..83e095a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
@@ -52,7 +52,7 @@ public final class ProjectStep<S, E> extends MapStep<S, Map<String, E>> implemen
     protected Map<String, E> map(final Traverser.Admin<S> traverser) {
         final Map<String, E> end = new LinkedHashMap<>(this.projectKeys.size(), 1.0f);
         for (final String projectKey : this.projectKeys) {
-            end.put(projectKey, TraversalUtil.apply(traverser, this.traversalRing.next()));
+            end.put(projectKey, TraversalUtil.applyNullable(traverser, this.traversalRing.next()));
         }
         this.traversalRing.reset();
         return end;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 7c54708..77db60f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -66,7 +66,7 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
         for (final String selectKey : this.selectKeys) {
             final E end = this.getNullableScopeValue(this.pop, selectKey, traverser);
             if (null != end)
-                bindings.put(selectKey, TraversalUtil.apply(end, this.traversalRing.next()));
+                bindings.put(selectKey, TraversalUtil.applyNullable(end, this.traversalRing.next()));
             else {
                 this.traversalRing.reset();
                 return null;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
index 8bdc692..ac1fa07 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
@@ -73,7 +73,7 @@ public final class TreeStep<S> extends ReducingBarrierStep<S, Tree> implements T
         Tree depth = topTree;
         final Path path = traverser.path();
         for (int i = 0; i < path.size(); i++) {
-            final Object object = TraversalUtil.apply(path.<Object>get(i), this.traversalRing.next());
+            final Object object = TraversalUtil.applyNullable(path.<Object>get(i), this.traversalRing.next());
             if (!depth.containsKey(object))
                 depth.put(object, new Tree<>());
             depth = (Tree) depth.get(object);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
index 9996c83..15756d2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
@@ -59,7 +59,7 @@ public final class TreeSideEffectStep<S> extends SideEffectStep<S> implements Si
         Tree depth = root;
         final Path path = traverser.path();
         for (int i = 0; i < path.size(); i++) {
-            final Object object = TraversalUtil.apply(path.<Object>get(i), this.traversalRing.next());
+            final Object object = TraversalUtil.applyNullable(path.<Object>get(i), this.traversalRing.next());
             if (!depth.containsKey(object))
                 depth.put(object, new Tree<>());
             depth = (Tree) depth.get(object);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
index 841f280..d6d10c0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
@@ -42,7 +42,7 @@ public final class TraversalRing<A, B> implements Serializable, Cloneable {
 
     public Traversal.Admin<A, B> next() {
         if (this.traversals.size() == 0) {
-            return this.identityTraversal;    // TODO: return null and TraversalUtil.applyNullable()?
+            return null;
         } else {
             this.currentTraversal = (this.currentTraversal + 1) % this.traversals.size();
             return this.traversals.get(this.currentTraversal);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
index cb1795d..7f65f23 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
@@ -43,7 +43,11 @@ public class WhereStepTest extends StepTest {
                 as("a").out().as("b").where(as("a").out()),
                 as("a").out().as("b").where(as("a").out().as("b")),
                 as("a").out().as("b").where("a", P.neq("b")),
-                as("a").out().as("b").where("a", P.neq("c"))
+                as("a").out().as("b").where("a", P.neq("c")),
+                as("a").out().as("b").where("a", P.neq("b")).by("name"),
+                as("a").out().as("b").where("a", P.neq("b")).by("name").by("age"),
+                as("a").out().as("b").where("a", P.neq("b")).by("age"),
+                as("a").out().as("b").where("a", P.neq("b").and(P.neq("a"))).by("age")
         );
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
index fc0aca9..a28c3dc 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
@@ -132,5 +132,20 @@ public abstract class GroovyWhereTest {
             new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('b').where(__.as('b').in.count.is(eq(3)).or.where(__.as('b').out('created').and.as('b').has(label,'person'))).select('a','b')")
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out('created').in('created').as('b').where('a', gt('b')).by('age').select('a', 'b').by('name')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').outE('created').as('b').inV().as('c').where('a', gt('b').or(eq('b'))).by('age').by('weight').by('weight').select('a', 'c').by('name')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').outE('created').as('b').inV().as('c').in('created').as('d').where('a', lt('b').or(gt('c')).and(neq('d'))).by('age').by('weight').by(__.in('created').values('age').min()).select('a', 'c', 'd').by('name')")
+        }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 79a1a4e..95bfdbf 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -152,10 +152,10 @@ class Traversal(object):
       return P("${SymbolHelper.toJava(method)}", *args)
 """)
                 };
-        pythonClass.append("""   def _and(self, arg):
-      return P("and", arg, self)
-   def _or(self, arg):
-      return P("or", arg, self)
+        pythonClass.append("""   def and_(self, arg):
+      return P("and", self, arg)
+   def or_(self, arg):
+      return P("or", self, arg)
    def __eq__(self, other):
         return isinstance(other, self.__class__) and self.operator == other.operator and self.value == other.value and self.other == other.other
    def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index 08295e0..90d29e8 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -175,7 +175,7 @@ public class PythonTranslator implements Translator.ScriptTranslator {
             for (int i = 0; i < list.size(); i++) {
                 convertPToString(list.get(i), current);
                 if (i < list.size() - 1)
-                    current.append(p instanceof OrP ? "._or(" : "._and(");
+                    current.append(p instanceof OrP ? ".or_(" : ".and_(");
             }
             current.append(")");
         } else

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 0302047..05739da 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -172,10 +172,10 @@ class P(object):
    @staticmethod
    def without(*args):
       return P("without", *args)
-   def _and(self, arg):
-      return P("and", arg, self)
-   def _or(self, arg):
-      return P("or", arg, self)
+   def and_(self, arg):
+      return P("and", self, arg)
+   def or_(self, arg):
+      return P("or", self, arg)
    def __eq__(self, other):
         return isinstance(other, self.__class__) and self.operator == other.operator and self.value == other.value and self.other == other.other
    def __repr__(self):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/jython/tests/process/test_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/process/test_traversal.py b/gremlin-python/src/main/jython/tests/process/test_traversal.py
index fe72ac1..0f25190 100644
--- a/gremlin-python/src/main/jython/tests/process/test_traversal.py
+++ b/gremlin-python/src/main/jython/tests/process/test_traversal.py
@@ -23,6 +23,7 @@ import unittest
 from unittest import TestCase
 
 from gremlin_python.structure.graph import Graph
+from gremlin_python.process.traversal import P
 
 
 class TestTraversal(TestCase):
@@ -52,6 +53,13 @@ class TestTraversal(TestCase):
         assert 1 == len(bytecode.step_instructions[1])
         assert 2 == len(bytecode.step_instructions[2])
 
+    def test_P(self):
+        # verify that the order of operations is respected
+        assert "and(eq(a),lt(b))" == str(P.eq("a").and_(P.lt("b")))
+        assert "and(or(lt(b),gt(c)),neq(d))" == str(P.lt("b").or_(P.gt("c")).and_(P.neq("d")))
+        assert "and(or(lt(b),gt(c)),or(neq(d),gte(e)))" == str(
+            P.lt("b").or_(P.gt("c")).and_(P.neq("d").or_(P.gte("e"))))
+
 
 if __name__ == '__main__':
     unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index cae1a53..6f244f5 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -27,6 +27,7 @@ from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONReader
 from gremlin_python.structure.io.graphson import GraphSONWriter
+from gremlin_python.process.traversal import P
 
 
 class TestGraphSONReader(TestCase):
@@ -87,6 +88,10 @@ class TestGraphSONWriter(TestCase):
         assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
         assert """true""" == GraphSONWriter.writeObject(True)
 
+    def test_P(self):
+        assert """{"@type":"g:P","@value":{"predicate":"and","value":[{"@type":"g:P","@value":{"predicate":"or","value":[{"@type":"g:P","@value":{"predicate":"lt","value":"b"}},{"@type":"g:P","@value":{"predicate":"gt","value":"c"}}]}},{"@type":"g:P","@value":{"predicate":"neq","value":"d"}}]}}""" == GraphSONWriter.writeObject(
+            P.lt("b").or_(P.gt("c")).and_(P.neq("d")))
+
 
 if __name__ == '__main__':
     unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
index 0e0bcb3..0ef3158 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
@@ -91,7 +91,7 @@ public class GraphSONWriterTest {
     public void shouldSerializeBytecode() throws Exception {
         assertEquals(P.eq(7L), mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L))").toString(), Object.class));
         // TODO: assertEquals(mapper.writeValueAsString(P.between(1, 2).and(P.eq(7L))), jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L)._and(P.between(1,2)))").toString().replace(" ",""));
-        assertEquals(AndP.class, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L)._and(P.between(1,2)))").toString(), Object.class).getClass());
+        assertEquals(AndP.class, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L).and_(P.between(1,2)))").toString(), Object.class).getClass());
         //
         assertEquals(new Bytecode.Binding<>("a", 5L), mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Binding('a',5L))").toString(), Object.class));
         //

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/68ecda40/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index a3ba0cc..03f76b7 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -21,24 +21,39 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
-import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.apache.tinkerpop.gremlin.process.traversal.P.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.gt;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.lt;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.neq;
 import static org.apache.tinkerpop.gremlin.process.traversal.P.not;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.within;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.without;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.and;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.not;
-import static org.junit.Assert.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.or;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -94,6 +109,14 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     //public abstract Traversal<Vertex, String> get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name();
 
+    // where()-by
+
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX();
+
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX();
+
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX() {
@@ -317,28 +340,64 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
                 "a", convertToVertex(graph, "josh"), "b", convertToVertex(graph, "lop")), traversal);
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(2,
+                "a", "peter", "b", "josh",
+                "a", "peter", "b", "marko",
+                "a", "josh", "b", "marko"), traversal);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(2,
+                "a", "peter", "c", "lop",
+                "a", "josh", "c", "lop",
+                "a", "josh", "c", "ripple",
+                "a", "marko", "c", "lop"), traversal);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(3,
+                "a", "peter", "c", "lop", "d", "josh",
+                "a", "peter", "c", "lop", "d", "marko",
+                "a", "josh", "c", "lop", "d", "marko",
+                "a", "josh", "c", "lop", "d", "peter"), traversal);
+    }
+
+
     public static class Traversals extends WhereTest {
 
         /// where(local)
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where("a", eq("b"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where("a", eq("b"));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_neqXbXX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where("a", neq("b"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where("a", neq("b"));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where(as("b").has("name", "marko"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where(as("b").has("name", "marko"));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_outXknowsX_bX() {
-            return g.V().has("age").as("a").out().in().has("age").as("b").select("a","b").where(as("a").out("knows").as("b"));
+            return g.V().has("age").as("a").out().in().has("age").as("b").select("a", "b").where(as("a").out("knows").as("b"));
         }
 
         /// where(global)
@@ -391,7 +450,7 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_selectXa_bX() {
-            return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select("a","b");
+            return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select("a", "b");
         }
 
         @Override
@@ -401,17 +460,34 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_selectXa_bX() {
-            return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).select("a","b");
+            return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).select("a", "b");
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_selectXa_b_c_dX() {
-            return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).select("a","b","c","d");
+            return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).select("a", "b", "c", "d");
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_selectXa_bX() {
-            return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select("a","b");
+            return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select("a", "b");
+        }
+
+        // where()-by
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_inXcreatedX_asXbX_whereXa_gtXbXX_byXageX_selectXa_bX_byXnameX() {
+            return g.V().as("a").out("created").in("created").as("b").where("a", gt("b")).by("age").<String>select("a", "b").by("name");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX() {
+            return g.V().as("a").outE("created").as("b").inV().as("c").where("a", gt("b").or(eq("b"))).by("age").by("weight").by("weight").<String>select("a", "c").by("name");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() {
+            return g.V().as("a").outE("created").as("b").inV().as("c").in("created").as("d").where("a", lt("b").or(gt("c")).and(neq("d"))).by("age").by("weight").by(in("created").values("age").min()).<String>select("a", "c", "d").by("name");
         }
     }
 }
\ No newline at end of file


[07/50] [abbrv] tinkerpop git commit: Removed the second jython execution from gremlin-python build

Posted by pi...@apache.org.
Removed the second jython execution from gremlin-python build


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/fdd70e5e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/fdd70e5e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/fdd70e5e

Branch: refs/heads/TINKERPOP-1404
Commit: fdd70e5edfb0743114a1825b025e3c0e1124d098
Parents: d4d8297
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 11:35:56 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 11:35:56 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fdd70e5e/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index b1a9453..50c823d 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -78,7 +78,7 @@
         </dependency>
     </dependencies>
     <properties>
-        <!-- provide a way to convert maven.test.skip value to skipTests for use in skipping python tests -->
+        <!-- provides a way to convert maven.test.skip value to skipTests for use in skipping python tests -->
         <maven.test.skip>false</maven.test.skip>
         <skipTests>${maven.test.skip}</skipTests>
         <gremlin.server.dir>${project.parent.basedir}/gremlin-server</gremlin.server.dir>
@@ -285,13 +285,13 @@
             <build>
                 <plugins>
                     <!-- excludes python related tests that require python itself installed on the system - run with the
-                         python profile if python is present -->
+                         python profile if glVPython is present -->
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
                         <configuration>
                             <systemPropertyVariables>
-                                <python.home>${project.build.testOutputDirectory}</python.home>
+                                <python.home>${project.build.outputDirectory}</python.home>
                             </systemPropertyVariables>
                             <excludes>
                                 <exclude>**/jsr223/Python*Test.java</exclude>
@@ -320,7 +320,7 @@
                         <artifactId>maven-surefire-plugin</artifactId>
                         <configuration>
                             <systemPropertyVariables>
-                                <python.home>${project.build.testOutputDirectory}</python.home>
+                                <python.home>${project.build.outputDirectory}</python.home>
                             </systemPropertyVariables>
                         </configuration>
                     </plugin>
@@ -331,19 +331,11 @@
                         <version>1.4</version>
                         <executions>
                             <execution>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>jython</goal>
-                                </goals>
-                            </execution>
-                            <execution>
-                                <id>pythonDependencies</id>
-                                <phase>generate-test-resources</phase>
+                                <phase>compile</phase>
                                 <goals>
                                     <goal>jython</goal>
                                 </goals>
                                 <configuration>
-                                    <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
                                     <libraries>
                                         <param>aenum==1.4.5</param>
                                         <param>tornado==4.4.1</param>
@@ -431,7 +423,7 @@
                                         <exec executable="env/bin/python" dir="${project.build.directory}/python"
                                               failonerror="true">
                                             <env key="PYTHONPATH" value=""/>
-                                            <arg line="setup.py build --build-lib ${project.build.testOutputDirectory}/Lib"/>
+                                            <arg line="setup.py build --build-lib ${project.build.outputDirectory}/Lib"/>
                                         </exec>
                                     </target>
                                 </configuration>


[13/50] [abbrv] tinkerpop git commit: added the homepage image light box to the graffle so we can reuse it in the future more easily. CTR.

Posted by pi...@apache.org.
added the homepage image light box to the graffle so we can reuse it in the future more easily. CTR.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9004b4bd
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9004b4bd
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9004b4bd

Branch: refs/heads/TINKERPOP-1404
Commit: 9004b4bda9d0bf15ddb8de113348d5ff0f8929b8
Parents: d4d8297
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Sep 14 10:33:37 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Sep 14 10:33:49 2016 -0600

----------------------------------------------------------------------
 docs/static/images/tinkerpop3.graffle | 4518 +++++++++++++++++++++++++++-
 1 file changed, 4500 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[24/50] [abbrv] tinkerpop git commit: Fix multiple occurrences of 'the'

Posted by pi...@apache.org.
Fix multiple occurrences of 'the'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6cdc5a03
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6cdc5a03
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6cdc5a03

Branch: refs/heads/TINKERPOP-1404
Commit: 6cdc5a03f6f649bc11f396f97ca6737788079a4a
Parents: d3dd2c1
Author: Mark Hoekstra <ma...@web-iq.eu>
Authored: Thu Sep 15 13:52:47 2016 +0200
Committer: Mark Hoekstra <ma...@web-iq.eu>
Committed: Thu Sep 15 14:02:24 2016 +0200

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc    |   4 +-
 .../reference/implementations-hadoop.asciidoc   |   2 +-
 .../implementations-tinkergraph.asciidoc        |   2 +-
 docs/src/reference/intro.asciidoc               |   2 +-
 docs/src/reference/the-traversal.asciidoc       |  10 +-
 docs/src/upgrade/index.asciidoc                 |   2 +-
 .../gremlin/process/computer/MapReduce.java     |   2 +-
 .../traversal/step/map/VertexProgramStep.java   | 135 +++++++++++++++++++
 .../process/remote/RemoteConnection.java        |  51 +++++++
 .../tinkerpop/gremlin/driver/Cluster.java       |   2 +-
 .../gremlin/driver/LoadBalancingStrategy.java   |   2 +-
 .../jsr223/GremlinGroovyScriptEngine.java       |   2 +-
 .../gremlin/server/AbstractChannelizer.java     |   2 +-
 .../computer/util/ComputerSubmissionHelper.java |   2 +-
 .../gremlin/neo4j/structure/Neo4jGraph.java     |   2 +-
 15 files changed, 204 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index 0c121c8..36124f1 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -27,7 +27,7 @@ Ways to Contribute
 image:gremlin-apache.png[width=250,float=left] While the concept of an open source contribution can refer to doing
 development work on the code base, there are many other ways outside of coding to contribute to Apache TinkerPop.
 Participating on the various mailing lists, offering ideas, reporting bugs, writing documentation are all welcome
-contributions to the project that help improve the The TinkerPop. This section of the document is designed to help
+contributions to the project that help improve the TinkerPop. This section of the document is designed to help
 provide some structure for potential contributors and to give them ideas for how they could get started becoming more
 involved in the TinkerPop community.
 
@@ -112,7 +112,7 @@ Before proceeding, contributors should evaluate if the proposed change is likely
 
 * Is it clear that code must change? Proposing a JIRA issue and pull request is appropriate only when a clear problem
 or change has been identified. When in doubt, email dev@tinkerpop.apache.org first about the possible change.
-* Search the the mailing list archives for related discussions. Often, the problem has been discussed before, with
+* Search the mailing list archives for related discussions. Often, the problem has been discussed before, with
 a resolution that doesn't require a code change, or recording what kinds of changes will not be accepted as a
 resolution.
 * Search link:https://issues.apache.org/jira/browse/TINKERPOP[JIRA] for existing issues.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-hadoop.asciidoc b/docs/src/reference/implementations-hadoop.asciidoc
index b89c0a1..6e95c6e 100644
--- a/docs/src/reference/implementations-hadoop.asciidoc
+++ b/docs/src/reference/implementations-hadoop.asciidoc
@@ -280,7 +280,7 @@ specified in `HADOOP_GREMLIN_LIBS`.
 export HADOOP_GREMLIN_LIBS=$HADOOP_GREMLIN_LIBS:/usr/local/gremlin-console/ext/spark-gremlin/lib
 
 Furthermore the `lib/` directory should be distributed across all machines in the SparkServer cluster. For this purpose TinkerPop
-provides a helper script, which takes the Spark installation directory and the the Spark machines as input:
+provides a helper script, which takes the Spark installation directory and the Spark machines as input:
 
 [source,shell]
 bin/hadoop/init-tp-spark.sh /usr/local/spark spark@10.0.0.1 spark@10.0.0.2 spark@10.0.0.3

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/implementations-tinkergraph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index aadec06..33c4dbf 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -96,7 +96,7 @@ TinkerGraph has several settings that can be provided on creation via `Configura
 |gremlin.tinkergraph.vertexPropertyIdManager |The `IdManager` implementation to use for vertex properties.
 |gremlin.tinkergraph.defaultVertexPropertyCardinality |The default `VertexProperty.Cardinality` to use when `Vertex.property(k,v)` is called.
 |gremlin.tinkergraph.graphLocation |The path and file name for where TinkerGraph should persist the graph data. If a
-value is specified here, the the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
+value is specified here, the `gremlin.tinkergraph.graphFormat` should also be specified.  If this value is not
 included (default), then the graph will stay in-memory and not be loaded/persisted to disk.
 |gremlin.tinkergraph.graphFormat |The format to use to serialize the graph which may be one of the following:
 `graphml`, `graphson`, `gryo`, or a fully qualified class name that implements Io.Builder interface (which allows for

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index a8c6a1a..0817630 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -298,7 +298,7 @@ g.V(marko).out('knows') <2>
 g.V(marko).out('knows').values('name') <3>
 ----
 
-<1> Set the variable `marko` to the the vertex in the graph `g` named "marko".
+<1> Set the variable `marko` to the vertex in the graph `g` named "marko".
 <2> Get the vertices that are outgoing adjacent to the marko-vertex via knows-edges.
 <3> Get the names of the marko-vertex's friends.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index f300e98..9309e23 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -307,7 +307,7 @@ g.V().hasLabel('software').as('a','b','c').
 Barrier Step
 ~~~~~~~~~~~~
 
-The `barrier()`-step (*barrier*) turns the the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
+The `barrier()`-step (*barrier*) turns the lazy traversal pipeline into a bulk-synchronous pipeline. This step is
 useful in the following situations:
 
   * When everything prior to `barrier()` needs to be executed before moving onto the steps after the `barrier()` (i.e. ordering).
@@ -742,7 +742,7 @@ g.V().has('name',not(within('josh','marko'))).valueMap() <5>
 
 <1> Find all vertices whose ages are between 20 (inclusive) and 30 (exclusive).
 <2> Find all vertices whose ages are not between 20 (inclusive) and 30 (exclusive).
-<3> Find all vertices whose names are exact matches to any names in the the collection `[josh,marko]`, display all
+<3> Find all vertices whose names are exact matches to any names in the collection `[josh,marko]`, display all
 the key,value pairs for those verticies.
 <4> Find all vertices whose names are not in the collection `[josh,marko]`, display all the key,value pairs for those vertices.
 <5> Same as the prior example save using `not` on `within` to yield `without`.
@@ -851,7 +851,7 @@ in a object-local traversal. As such, the `order().by()` and the `limit()` refer
 stream as a whole.
 
 WARNING: The anonymous traversal of `local()` processes the current object "locally." In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
 the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or edges.
 
 [[match-step]]
@@ -1430,7 +1430,7 @@ g.V(1).repeat(out()).until(outE().count().is(0)).path().by('name') <3>
 <3> Starting from vertex 1, keep taking outgoing edges until a vertex is reached that has no more outgoing edges.
 
 WARNING: The anonymous traversal of `emit()` and `until()` (not `repeat()`) process their current objects "locally."
-In OLAP, where the atomic unit of computing is the the vertex and its local "star graph," it is important that the
+In OLAP, where the atomic unit of computing is the vertex and its local "star graph," it is important that the
 anonymous traversals do not leave the confines of the vertex's star graph. In other words, they can not traverse to
 an adjacent vertex's properties or edges.
 
@@ -2002,7 +2002,7 @@ g.V().where(__.not(out('created')).and().in('knows')).values('name') <6>
 <6> The concatenation of `where()`-steps is the same as a single `where()`-step with an and'd clause.
 
 WARNING: The anonymous traversal of `where()` processes the current object "locally". In OLAP, where the atomic unit
-of computing is the the vertex and its local "star graph," it is important that the anonymous traversal does not leave
+of computing is the vertex and its local "star graph," it is important that the anonymous traversal does not leave
 the confines of the vertex's star graph. In other words, it can not traverse to an adjacent vertex's properties or
 edges. Note that is only a temporary limitation that will be addressed in a future version of TinkerPop3 (see
 link:https://issues.apache.org/jira/browse/TINKERPOP-693[TINKERPOP-693]).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/index.asciidoc b/docs/src/upgrade/index.asciidoc
index e1d07db..ac4762e 100644
--- a/docs/src/upgrade/index.asciidoc
+++ b/docs/src/upgrade/index.asciidoc
@@ -24,7 +24,7 @@ TinkerPop Upgrade Information
 This document helps users of TinkerPop to understand the changes that come with each software release.  It outlines
 new features, how to resolve breaking changes and other information specific to a release.  This document is useful
 to end-users who are building applications on TinkerPop, but it is equally useful to TinkerPop providers, who
-build libraries and other systems on the the core APIs and protocols that TinkerPop exposes.
+build libraries and other systems on the core APIs and protocols that TinkerPop exposes.
 
 These providers include:
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
index 3e1eae6..b1763e0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
@@ -33,7 +33,7 @@ import java.util.Optional;
  * The map() stage processes the vertices of the {@link org.apache.tinkerpop.gremlin.structure.Graph} in a logically parallel manner.
  * The combine() stage aggregates the values of a particular map emitted key prior to sending across the cluster.
  * The reduce() stage aggregates the values of the combine/map emitted keys for the keys that hash to the current machine in the cluster.
- * The interface presented here is nearly identical to the interface popularized by Hadoop save the the map() is over the vertices of the graph.
+ * The interface presented here is nearly identical to the interface popularized by Hadoop save the map() is over the vertices of the graph.
  *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
new file mode 100644
index 0000000..d005940
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.process.computer.Computer;
+import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
+import org.apache.tinkerpop.gremlin.process.computer.util.EmptyMemory;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+import java.util.NoSuchElementException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
+
+    public static final String ROOT_TRAVERSAL = "gremlin.vertexProgramStep.rootTraversal";
+    public static final String STEP_ID = "gremlin.vertexProgramStep.stepId";
+
+    protected Computer computer = Computer.compute();
+
+    protected boolean first = true;
+
+    public VertexProgramStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    @Override
+    protected Traverser.Admin<ComputerResult> processNextStart() throws NoSuchElementException {
+        Future<ComputerResult> future = null;
+        try {
+            if (this.first && this.getPreviousStep() instanceof EmptyStep) {
+                this.first = false;
+                final Graph graph = this.getTraversal().getGraph().get();
+                future = this.getComputer().apply(graph).program(this.generateProgram(graph, EmptyMemory.instance())).submit();
+                final ComputerResult result = future.get();
+                this.processMemorySideEffects(result.memory());
+                return this.getTraversal().getTraverserGenerator().generate(result, this, 1l);
+            } else {
+                final Traverser.Admin<ComputerResult> traverser = this.starts.next();
+                final Graph graph = traverser.get().graph();
+                final Memory memory = traverser.get().memory();
+                future = this.generateComputer(graph).program(this.generateProgram(graph, memory)).submit();
+                final ComputerResult result = future.get();
+                this.processMemorySideEffects(result.memory());
+                return traverser.split(result, this);
+            }
+        } catch (final InterruptedException ie) {
+            // the thread running the traversal took an interruption while waiting on the call the future.get().
+            // the future should then be cancelled with interruption so that the GraphComputer that created
+            // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
+            // cancellation request.
+            if (future != null) future.cancel(true);
+            throw new TraversalInterruptedException();
+        } catch (ExecutionException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public Computer getComputer() {
+        Computer tempComputer = this.computer;
+        if (!this.isEndStep()) {
+            if (null == tempComputer.getPersist())
+                tempComputer = tempComputer.persist(GraphComputer.Persist.EDGES);
+            if (null == tempComputer.getResultGraph())
+                tempComputer = tempComputer.result(GraphComputer.ResultGraph.NEW);
+        }
+        return tempComputer;
+    }
+
+    @Override
+    public void setComputer(final Computer computer) {
+        this.computer = computer;
+    }
+
+    protected boolean previousTraversalVertexProgram() {
+        Step<?, ?> currentStep = this;
+        while (!(currentStep instanceof EmptyStep)) {
+            if (currentStep instanceof TraversalVertexProgramStep)
+                return true;
+            currentStep = currentStep.getPreviousStep();
+        }
+        return false;
+    }
+
+    private void processMemorySideEffects(final Memory memory) {
+        // update the traversal side-effects with the state of the memory after the OLAP job execution
+        final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects();
+        for (final String key : memory.keys()) {
+            if (sideEffects.exists(key)) {
+                // halted traversers should never be propagated through sideEffects
+                assert !key.equals(TraversalVertexProgram.HALTED_TRAVERSERS);
+                sideEffects.set(key, memory.get(key));
+            }
+        }
+    }
+
+    protected boolean isEndStep() {
+        return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
new file mode 100644
index 0000000..8506ad7
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.remote;
+
+import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+
+import java.util.Iterator;
+
+/**
+ * A simple abstraction of a "connection" to a "server" that is capable of processing a {@link Traversal} and
+ * returning results. Results refer to both the {@link Iterator} of results from the submitted {@link Traversal}
+ * as well as the side-effects produced by that {@link Traversal}. Those results together are wrapped in a
+ * {@link Traversal}.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public interface RemoteConnection extends AutoCloseable {
+
+    /**
+     * @deprecated As of release 3.2.2, replaced by {@link #submit(Bytecode)}.
+     */
+    @Deprecated
+    public <E> Iterator<Traverser.Admin<E>> submit(final Traversal<?, E> traversal) throws RemoteConnectionException;
+
+    /**
+     * Submits {@link Traversal} {@link Bytecode} to a server and returns a {@link Traversal}.
+     * The {@link Traversal} is an abstraction over two types of results that can be returned as part of the
+     * response from the server: the results of the {@link Traversal} itself and the side-effects that it produced.
+     */
+    public <E> RemoteTraversal<?,E> submit(final Bytecode bytecode) throws RemoteConnectionException;
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index f033dc3..6a6a2e3 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -232,7 +232,7 @@ public final class Cluster {
 
     /**
      * Gets the list of hosts that the {@code Cluster} was able to connect to.  A {@link Host} is assumed unavailable
-     * until a connection to it is proven to be present.  This will not happen until the the {@link Client} submits
+     * until a connection to it is proven to be present.  This will not happen until the {@link Client} submits
      * requests that succeed in reaching a server at the {@link Host} or {@link Client#init()} is called which
      * initializes the {@link ConnectionPool} for the {@link Client} itself.  The number of available hosts returned
      * from this method will change as different servers come on and offline.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
index b485911..c6ad4bd 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/LoadBalancingStrategy.java
@@ -41,7 +41,7 @@ public interface LoadBalancingStrategy extends Host.Listener {
     public void initialize(final Cluster cluster, final Collection<Host> hosts);
 
     /**
-     * Provide an ordered list of hosts to send the the given {@link RequestMessage} to.
+     * Provide an ordered list of hosts to send the given {@link RequestMessage} to.
      */
     public Iterator<Host> select(final RequestMessage msg);
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
index 23240cb..ca129c6 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
@@ -343,7 +343,7 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
     private void internalReset() {
         createClassLoader();
 
-        // must clear the local cache here because the the classloader has been reset.  therefore, classes previously
+        // must clear the local cache here because the classloader has been reset.  therefore, classes previously
         // referenced before that might not have evaluated might cleanly evaluate now.
         classMap.clear();
         globalClosures.clear();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
index 829a3ee..ce3d050 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
@@ -50,7 +50,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.stream.Stream;
 
 /**
- * A base implementation for the {@code Channelizer} which does a basic configuration of the the pipeline, one that
+ * A base implementation for the {@code Channelizer} which does a basic configuration of the pipeline, one that
  * is generally common to virtually any Gremlin Server operation (i.e. where the server's purpose is to process
  * Gremlin scripts).
  * <p/>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
index daad7ef..75ca4cf 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/process/computer/util/ComputerSubmissionHelper.java
@@ -39,7 +39,7 @@ public class ComputerSubmissionHelper {
      * <p>
      * This is intended to serve as an alternative to {@link ForkJoinPool#commonPool()},
      * which is used by {@link CompletableFuture#supplyAsync(Supplier)} (among other methods).
-     * The the single threaded executor created by this method contains a thread
+     * The single threaded executor created by this method contains a thread
      * with the same context classloader and thread group as the thread that called
      * this method.  Threads created in this method also have predictable behavior when
      * {@link Thread#setContextClassLoader(ClassLoader)} is invoked; threads in the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6cdc5a03/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
index 6f896af..d5460c7 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
@@ -270,7 +270,7 @@ public final class Neo4jGraph implements Graph, WrappedGraph<Neo4jGraphAPI> {
     }
 
     /**
-     * This implementation of {@code close} will also close the current transaction on the the thread, but it
+     * This implementation of {@code close} will also close the current transaction on the thread, but it
      * is up to the caller to deal with dangling transactions in other threads prior to calling this method.
      */
     @Override


[40/50] [abbrv] tinkerpop git commit: Merge branch 'TINKERPOP-1444'

Posted by pi...@apache.org.
Merge branch 'TINKERPOP-1444'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/0ee005b6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/0ee005b6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/0ee005b6

Branch: refs/heads/TINKERPOP-1404
Commit: 0ee005b623785d78c31840327fd61f5e13612550
Parents: 3a4f705 c47217d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 13:45:49 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 13:45:49 2016 -0600

----------------------------------------------------------------------
 .../gremlin/jsr223/JavaTranslator.java          | 40 +++++++++++---------
 .../structure/TinkerGraphPlayTest.java          |  2 +-
 2 files changed, 24 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[38/50] [abbrv] tinkerpop git commit: Merge branch 'TINKERPOP-1391-master'

Posted by pi...@apache.org.
Merge branch 'TINKERPOP-1391-master'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/3a4f7051
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/3a4f7051
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/3a4f7051

Branch: refs/heads/TINKERPOP-1404
Commit: 3a4f70510b8b2a536748f3f5d85b824e23431d37
Parents: 687ae74 eeb218c
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Sep 15 20:09:23 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Sep 15 20:09:23 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  3 ++-
 .../optimization/RangeByIsCountStrategy.java    | 20 +++++++++++++++++---
 .../RangeByIsCountStrategyTest.java             |  2 ++
 3 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3a4f7051/CHANGELOG.asciidoc
----------------------------------------------------------------------


[20/50] [abbrv] tinkerpop git commit: updated setup.py, added six as requirement (for python 3), also added some basic classifiers

Posted by pi...@apache.org.
updated setup.py, added six as requirement (for python 3), also added some basic classifiers


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1c5e6989
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1c5e6989
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1c5e6989

Branch: refs/heads/TINKERPOP-1404
Commit: 1c5e6989b2b452b14c958ed744fee3d4ebed965a
Parents: c7d3da2
Author: davebshow <da...@apache.org>
Authored: Wed Sep 14 18:23:42 2016 -0400
Committer: davebshow <da...@apache.org>
Committed: Wed Sep 14 18:23:42 2016 -0400

----------------------------------------------------------------------
 gremlin-python/src/main/jython/setup.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1c5e6989/gremlin-python/src/main/jython/setup.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.py b/gremlin-python/src/main/jython/setup.py
index f2472b7..08cfe37 100644
--- a/gremlin-python/src/main/jython/setup.py
+++ b/gremlin-python/src/main/jython/setup.py
@@ -61,6 +61,15 @@ setup(
     ],
     install_requires=[
         'aenum==1.4.5',
-        'tornado==4.4.1'
+        'tornado==4.4.1',
+        'six==1.10.0'
+    ],
+    classifiers=[
+        "Intended Audience :: Developers",
+        "License :: OSI Approved :: Apache Software License",
+        "Natural Language :: English",
+        "Programming Language :: Python :: 2.7",
+        "Programming Language :: Python :: 3.4",
+        "Programming Language :: Python :: 3.5",
     ]
 )


[08/50] [abbrv] tinkerpop git commit: Drop -DglvPython as a requirement for building gremlin-python.

Posted by pi...@apache.org.
Drop -DglvPython as a requirement for building gremlin-python.

Now you can just add .glv file to the root of gremlin-python to let Maven know that your environment is python-enabled.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e0d7c90d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e0d7c90d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e0d7c90d

Branch: refs/heads/TINKERPOP-1404
Commit: e0d7c90d4391e24ae18fdb2cc6a57c978039b29f
Parents: fdd70e5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 11:59:07 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 11:59:07 2016 -0400

----------------------------------------------------------------------
 .gitignore                                              |  1 +
 docs/src/dev/developer/development-environment.asciidoc | 11 ++++++++++-
 gremlin-python/pom.xml                                  |  8 ++++----
 pom.xml                                                 |  1 +
 4 files changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 9d83c5a..33fb239 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@ benchmarks/
 __pycache__/
 *.py[cdo]
 __version__.py
+.glv

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index 117f792..632100c 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -65,6 +65,16 @@ As of TinkerPop 3.2.2, the build optionally requires link:https://www.python.org
 Java tests that require Python code will be skipped. Developers should also install link:https://pypi.python.org/pypi/pip[pip]
 and link:https://virtualenv.pypa.io/en/stable/[virtualenv].
 
+Once the Python environment is established, the full building and testing of `gremlin-python` may commence. It can be
+done manually from the command line with:
+
+[source,text]
+mvn clean install -Pglv-python
+
+which enables the "glv-python" Maven profile or in a more automated fashion simply add a `.glv` file to the root of the
+`gremlin-python` module which will signify to Maven that the environment is Python-ready. The `.glv` file need not have
+any contents and is ignored by Git. A standard `mvn clean install` will then build `gremlin-python` in full.
+
 [[release-environment]]
 Release Environment
 ~~~~~~~~~~~~~~~~~~~
@@ -117,7 +127,6 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Clean the `.groovy/grapes/org.apache.tinkerpop` directory on build: `mvn clean install -DcleanGrapes`
 ** Turn off "heavy" logging in the "process" tests: `mvn clean install -DargLine="-DmuteTestLogs=true"`
 ** The test suite for `neo4j-gremlin` is disabled by default - to turn it on: `mvn clean install -DincludeNeo4j`
-** Build and execute with native Python tests (see <<python-environment,Python Environment>>: `mvn clean install -DglvPython`
 * Regenerate test data (only necessary given changes to IO classes): `mvn clean install -Dio` from `tinkergraph-gremlin` directory
 ** If there are changes to the Gryo format, it may be necessary to generate the Grateful Dead dataset from GraphSON (see `IoDataGenerationTest.shouldWriteGratefulDead`)
 * Check license headers are present: `mvn apache-rat:check`

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 50c823d..3695c0d 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -275,7 +275,7 @@
     </build>
 
     <profiles>
-        <!-- This default profile works around the issue where the glvPython profile which is expected to run all tests
+        <!-- This default profile works around the issue where the glv-python profile which is expected to run all tests
              can't override the exclusions defined below. -->
         <profile>
             <id>glv-python-standard</id>
@@ -307,9 +307,9 @@
             <id>glv-python</id>
             <activation>
                 <activeByDefault>false</activeByDefault>
-                <property>
-                    <name>glvPython</name>
-                </property>
+                <file>
+                    <exists>.glv</exists>
+                </file>
             </activation>
             <build>
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0d7c90d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index fd620e7..e37746c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -293,6 +293,7 @@ limitations under the License.
                         <exclude>**/src/main/static/**</exclude>
                         <exclude>**/_bsp/**</exclude>
                         <exclude>DEPENDENCIES</exclude>
+                        <exclude>.glv</exclude>
                     </excludes>
                     <licenses>
                         <license implementation="org.apache.rat.analysis.license.ApacheSoftwareLicense20"/>


[18/50] [abbrv] tinkerpop git commit: Minor change to AWK to allow the docs to generate properly

Posted by pi...@apache.org.
Minor change to AWK to allow the docs to generate properly

This provides a solution to TINKERPOP-1431


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/64670636
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/64670636
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/64670636

Branch: refs/heads/TINKERPOP-1404
Commit: 64670636bdfce80a07f8a7543b78f3efdfeb53dd
Parents: 079cc20
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Sep 14 15:58:14 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Sep 14 15:58:14 2016 -0400

----------------------------------------------------------------------
 docs/preprocessor/preprocess-file.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64670636/docs/preprocessor/preprocess-file.sh
----------------------------------------------------------------------
diff --git a/docs/preprocessor/preprocess-file.sh b/docs/preprocessor/preprocess-file.sh
index 1069928..1e54c8e 100755
--- a/docs/preprocessor/preprocess-file.sh
+++ b/docs/preprocessor/preprocess-file.sh
@@ -133,7 +133,7 @@ if [ ! ${SKIP} ] && [ $(grep -c '^\[gremlin' ${input}) -gt 0 ]; then
 
   sed 's/\t/    /g' ${input} |
   awk -f ${AWK_SCRIPTS}/prepare.awk |
-  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" PYTHONPATH="." |
+  awk -f ${AWK_SCRIPTS}/init-code-blocks.awk -v TP_HOME="${TP_HOME}" -v PYTHONPATH="./gremlin-python/target/classes/Lib" |
   awk -f ${AWK_SCRIPTS}/progressbar.awk -v tpl=${AWK_SCRIPTS}/progressbar.groovy.template |
   HADOOP_GREMLIN_LIBS="${CONSOLE_HOME}/ext/giraph-gremlin/lib:${CONSOLE_HOME}/ext/tinkergraph-gremlin/lib" bin/gremlin.sh |
   ${lb} awk -f ${AWK_SCRIPTS}/ignore.awk   |


[25/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1449'

Posted by pi...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1449'

Conflicts:
	CHANGELOG.asciidoc


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8fc60ad4
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8fc60ad4
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8fc60ad4

Branch: refs/heads/TINKERPOP-1404
Commit: 8fc60ad455dcab11127f3b78158134aee6468123
Parents: cedbe9c a569ea8
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 09:53:05 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 09:53:05 2016 -0400

----------------------------------------------------------------------
 .gitignore                                      |  1 +
 CHANGELOG.asciidoc                              |  1 +
 docs/preprocessor/preprocess-file.sh            |  2 +-
 .../developer/development-environment.asciidoc  | 13 ++++-
 docs/src/dev/developer/release.asciidoc         | 16 +++---
 giraph-gremlin/pom.xml                          | 18 -------
 gremlin-console/pom.xml                         | 18 -------
 gremlin-groovy-test/pom.xml                     | 18 -------
 gremlin-groovy/pom.xml                          | 18 -------
 gremlin-python/pom.xml                          | 54 +++++---------------
 hadoop-gremlin/pom.xml                          | 18 -------
 neo4j-gremlin/pom.xml                           | 18 -------
 pom.xml                                         | 24 +++++++++
 spark-gremlin/pom.xml                           | 18 -------
 14 files changed, 62 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fc60ad4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index b359f37,ab2f8df..fd9255f
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -28,7 -28,7 +28,8 @@@ TinkerPop 3.2.3 (Release Date: NOT OFFI
  
  * Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
  * Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 +* VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
+ * New build options for `gremlin-python` where `-DglvPython` is no longer required.
  * Added missing `InetAddress` to GraphSON extension module.
  
  [[release-3-2-2]]


[48/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by pi...@apache.org.
Merge remote-tracking branch 'origin/tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4293eb33
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4293eb33
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4293eb33

Branch: refs/heads/TINKERPOP-1404
Commit: 4293eb333dfbf3aea19cd326f9f3d13619ac0b54
Parents: 1e24853 4ed0095
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 16 10:16:02 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 16 10:16:02 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc   |  6 +-
 docs/src/dev/developer/for-committers.asciidoc | 83 ++++++++++++++++++---
 2 files changed, 76 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4293eb33/docs/src/dev/developer/for-committers.asciidoc
----------------------------------------------------------------------


[22/50] [abbrv] tinkerpop git commit: This closes #170

Posted by pi...@apache.org.
This closes #170


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cedbe9cb
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cedbe9cb
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cedbe9cb

Branch: refs/heads/TINKERPOP-1404
Commit: cedbe9cb1157ae3a6316b3c8ec802bc46291616a
Parents: a0cbe2d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Sep 15 06:58:07 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Sep 15 06:58:07 2016 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------