You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2016/09/15 10:35:26 UTC

[01/37] tinkerpop git commit: Update release documentation. [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1280 a33e85561 -> a0cbe2d28 (forced update)


Update release documentation.

Provided some more clarity on some of the release steps. CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: b8ecebecd539102dd3cf0209a188f17ca12e3966
Parents: 16057b1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 9 08:37:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 9 08:37:55 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/release.asciidoc | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b8ecebec/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index 8b16e2d..ae1f246 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -94,34 +94,36 @@ are additional tests to perform that the release manager feels are relevant, the
 words, there is no need to rebuild the `SNAPSHOT` yet another time unless there are circumstances that would call its
 validity into question.
 . Update `CHANGELOG.asciidoc`:
-.. Update the release date
+.. Update the release date - the release date is the date of the vote.
 .. Generate the JIRA release notes report for the current version and append them to the `CHANGELOG.asciidoc`.
 ... Use an "advanced" search to filter out JIRA issues already released on other versions. For example: `fixVersion
-= 3.2.0 AND fixVersion not in (3.1.3, 3.1.2, 3.1.1, 3.1.0)`.
-... Consider use of an "Excel" export to organize, sort (by type and then id) and prepare the JIRA tickets to be pasted to `CHANGELOG.asciidoc`
+= 3.2.0 AND fixVersion not in (3.1.3, 3.1.2, 3.1.1, 3.1.0) ORDER BY type, Id ASC`.
+... Consider use of an "Excel" export to organize and prepare the JIRA tickets to be pasted to `CHANGELOG.asciidoc`
 ... Be sure to include a link to other versions in the `CHANGELOG.asciidoc` that were previously released while the
 current release was under development as this new release will have those changes included within it. Please see
 3.2.1 for an example.
 .. Organize "breaking" changes to be clearly marked (use JIRA and the "breaking" label to identify those)
 . Update "upgrade documentation":
 .. Update the release date.
-.. Update the link to CHANGELOG.asciidoc
+.. Update the link to `CHANGELOG.asciidoc` - this link may already be correct but will not exist until the repository is tagged.
 . `mvn versions:set -DnewVersion=xx.yy.zz -DgenerateBackupPoms=false` to update project files to reference the non-SNAPSHOT version
 . `git diff` and review the updated files (expect all `pom.xml` files and this README)
 . `git commit -a -m "TinkerPop xx.yy.zz release"` and push
 . `mvn clean install` - need to build first so that the right version of the console is used with `bin/publish-docs.sh`
 . `bin/process-docs.sh` and validate the generated documentation locally (don't rely on "SUCCESS" - scroll up through logs to ensure there were no errors and view the HTML directly)
-. `bin/publish-docs.sh <username>` - Note that this step requires no additional processing as the previous step.
-handled document generation and this step now merely needs to upload what was generated.
-. `mvn deploy -Papache-release -DcreateChecksum=true -DskipTests` - deploy signed artifacts with checksums to link:https://repository.apache.org/[Apache Nexus]. Review (artifacts versions, file sizes, anything that might be out of place - request another committer to review as well).
-. Review generated artifacts to be sure they have both javadocs and asciidocs present then "close" the repo - if the repo is left open it will be automatically dropped after five days and closing the repo will allow it to stay available for a full ninety days which is more than enough time to complete a vote. Do NOT "release" the repository at this time.
-. Upload artifacts to `https://dist.apache.org/repos/dist/dev//tinkerpop` for `[VOTE]` review.
-.. `svn co --depth empty https://dist.apache.org/repos/dist/dev//tinkerpop/ dev` and `mkdir dev/xx.yy.zz`
+. `bin/publish-docs.sh <username>` - Note that this step requires no additional processing as the previous step handled
+document generation and this step now merely needs to upload what was generated. Note that this step will be responsible
+for generating javadoc and without that the binary distributions won't contain that documentation.
+. `mvn deploy -Papache-release -DcreateChecksum=true -DskipTests` - deploy signed artifacts with checksums to link:https://repository.apache.org/[Apache Nexus].
+. Review generated artifacts to be sure they have both javadocs and asciidocs present (request another committer to review as well) then "close" the repo - if the repo is left open it will be automatically dropped after five days and closing the repo will allow it to stay available for a full ninety days which is more than enough time to complete a vote. Do NOT "release" the repository at this time.
+. Upload artifacts to `https://dist.apache.org/repos/dist/dev/tinkerpop` for `[VOTE]` review.
+.. Use `svn rm` to delete past versions that were up for review in the same line of code. In other words, if uploading 3.2.3 then remove instances of 3.2.2 or any other past 3.2.x releases.
+.. `svn co --depth empty https://dist.apache.org/repos/dist/dev/tinkerpop/ dev` and `mkdir dev/xx.yy.zz`
 .. `cp ~/.m2/repository/org/apache/tinkerpop/gremlin-console/xx.yy.zz/gremlin-console-xx.yy.zz-distribution.zip* dev/xx.yy.zz`
 .. `cp ~/.m2/repository/org/apache/tinkerpop/gremlin-server/xx.yy.zz/gremlin-server-xx.yy.zz-distribution.zip* dev/xx.yy.zz`
 .. `cp ~/.m2/repository/org/apache/tinkerpop/tinkerpop/xx.yy.zz/tinkerpop-xx.yy.zz-source-release.zip* dev/xx.yy.zz`
 .. `cd dev/xx.yy.zz`
-.. pass:[<code>ls * | xargs -n1 -I {} echo "mv apache-tinkerpop-{} {}" | sed -e 's/distribution/bin/' -e 's/source-release/src/' -e s'/^\(.*\) \(.*\) \(.*\)$/\1 \3 \2/' | /bin/bash</code>]
+.. pass:[<code>ls * | xargs -n1 -I {} echo "mv apache-tinkerpop-{} {}" | sed -e 's/distribution/bin/' -e 's/source-release/src/' -e 's/tinkerpop-tinkerpop/tinkerpop/' -e s'/^\(.*\) \(.*\) \(.*\)$/\1 \3 \2/' | /bin/bash</code>]
 .. `cd ..; svn add xx.yy.zz/; svn ci -m "TinkerPop xx.yy.zz release"`
 . Execute `bin/validate-distribution.sh` and any other relevant testing.
 . `git tag -a -m "TinkerPop xx.yy.zz release" xx.yy.zz` and `git push --tags`
@@ -181,7 +183,7 @@ The GPG key used to sign the release artifacts is available at:
     https://dist.apache.org/repos/dist/dev/tinkerpop/KEYS
 
 The online docs can be found here:
-	http://tinkerpop.apache.org/docs/xx.yy.zz/reference/ (user docs)
+	http://tinkerpop.apache.org/docs/xx.yy.zz/ (user docs)
 	http://tinkerpop.apache.org/docs/xx.yy.zz/upgrade/ (upgrade docs)
 	http://tinkerpop.apache.org/javadocs/xx.yy.zz/core/ (core javadoc)
 	http://tinkerpop.apache.org/javadocs/xx.yy.zz/full/ (full javadoc)


[10/37] tinkerpop git commit: Update upgrade docs for 3.1.5 CTR

Posted by dk...@apache.org.
Update upgrade docs for 3.1.5 CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 23abbe1ed58ee3a553da86fa4c2d02a494ba0813
Parents: 239a10a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 06:47:27 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 06:47:27 2016 -0400

----------------------------------------------------------------------
 docs/src/upgrade/release-3.1.x-incubating.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23abbe1e/docs/src/upgrade/release-3.1.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.1.x-incubating.asciidoc b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
index 154c344..400ea10 100644
--- a/docs/src/upgrade/release-3.1.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
@@ -22,7 +22,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 *A 187 On The Undercover Gremlinz*
 
-TinkerPop 3.1.4
+TinkerPop 3.1.5
 ---------------
 
 *Release Date: NOT OFFICIALLY RELEASED YET*


[05/37] tinkerpop git commit: Fixed formatting of email templates and add some notes CTR

Posted by dk...@apache.org.
Fixed formatting of email templates and add some notes CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 9337e49fd7b741b7ebbd3aa7bd9a2b82eae75616
Parents: 74a173d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 9 09:50:02 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 9 09:50:02 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/release.asciidoc | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9337e49f/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index ae1f246..4662402 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -162,7 +162,8 @@ Email Templates
 Release VOTE
 ~~~~~~~~~~~~
 
-```
+[source,text]
+----
 Subject: [VOTE] TinkerPop xx.yy.zz Release
 
 Hello,
@@ -200,12 +201,13 @@ My vote is +1.
 
 Thank you very much,
 <TinkerPop Committer Name>
-```
+----
 
 Dev Release RESULT VOTE
 ~~~~~~~~~~~~~~~~~~~~~~~
 
-```
+[source,text]
+----
 Subject: [RESULT][VOTE] TinkerPop xx.yy.zz Release
 
 This vote is now closed with a total of X +1s, no +0s and no -1s. The results are:
@@ -224,11 +226,17 @@ NON-BINDING VOTES:
 
 Thank you very much,
 <TinkerPop Committer Name>
-```
+----
 
 General Release Announcement
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+The template below refers to the "name of release line" and the "release line logo". Every release line has a name
+and logo. For example, 3.1.x had the name, "A 187 On The Undercover Gremlinz" and the logo shown
+link:http://tinkerpop.apache.org/docs/current/upgrade/#_tinkerpop_3_1_0[here] in the upgrade documentation.
+
+[source,text]
+----
 Subject: TinkerPop xx.yy.zz Released: [name of release line]
 
 Hello,
@@ -257,4 +265,5 @@ The Central Maven repo has sync'd as well:
 
 https://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/xx.yy.zz/
 
-[include the release line logo]
+[include the release line logo image]
+----
\ No newline at end of file


[16/37] tinkerpop git commit: Prevented deployment of java artifacts on mvn deploy -Dpypi CTR

Posted by dk...@apache.org.
Prevented deployment of java artifacts on mvn deploy -Dpypi CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 0e42dae5cd36147c6096728ec19efe1733df012c
Parents: 4222630
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 12:08:53 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 12:10:04 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0e42dae5/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 45610a7..b1a9453 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -596,6 +596,19 @@ log.info("Gremlin Server shutdown")
             </activation>
             <build>
                 <plugins>
+                    <!--
+                    pypi doesn't have a staging area like sonatype so the deploy to pypi is done out of the normal
+                    release band. it is performed after successful VOTE in which case, the maven artifacts should
+                    not be deployed again - hence the plugin is disabled. deployment to pypi uses the antrun plugin
+                    below with twine so disabling the plugin has no effect on the pypi deployment.
+                    -->
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-deploy-plugin</artifactId>
+                        <configuration>
+                            <skip>true</skip>
+                        </configuration>
+                    </plugin>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-antrun-plugin</artifactId>
@@ -613,9 +626,10 @@ log.info("Gremlin Server shutdown")
                                               failonerror="true">
                                             <arg line="install twine"/>
                                         </exec>
+                                        <!-- to use the pypi test environment add: -r pypitest -->
                                         <exec dir="${project.build.directory}/python-packaged" executable="env/bin/twine"
                                               failonerror="true">
-                                            <arg line="upload dist/* -r pypi -s"/>
+                                            <arg line="upload dist/* -r pypi -s "/>
                                         </exec>
                                     </tasks>
                                 </configuration>


[23/37] tinkerpop git commit: Merge branch 'TINKERPOP-1264' into tp31

Posted by dk...@apache.org.
Merge branch 'TINKERPOP-1264' into tp31


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

Branch: refs/heads/TINKERPOP-1280
Commit: 0b11fb1a1936da08147503820eadc0839159d581
Parents: e0de46e 285ecbb
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 01:45:52 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 01:45:52 2016 +0200

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



[32/37] tinkerpop git commit: minor fix in has(accessor, value, values)

Posted by dk...@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-1280
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);


[11/37] tinkerpop git commit: Add more notes/clarifications to release documentation CTR

Posted by dk...@apache.org.
Add more notes/clarifications to release documentation CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 7fa75fdd2cc58f458e1d9f8ed4251a1a80100c8a
Parents: 23abbe1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 06:57:33 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 06:57:33 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/release.asciidoc | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fa75fdd/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index 4662402..f9baa94 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -133,10 +133,10 @@ for generating javadoc and without that the binary distributions won't contain t
 . Prepare Git administration tasks. Note that this work can be performed at the release manager's discretion. It may be wise to wait until a successful VOTE is eminent before reopening development. Apply the following steps as needed per release branch:
 .. Make the appropriate branching changes as required by the release and bump the version to `SNAPSHOT` with
 `mvn versions:set -DnewVersion=xx.yy.zz-SNAPSHOT -DgenerateBackupPoms=false`.
+.. Update CHANGELOG and upgrade docs to have the appropriate headers for the next version.
 .. `mvn clean install -DskipTests` - need to build first so that the right version of the console is used with `bin/publish-docs.sh`
 .. `mvn deploy` - deploy the new `SNAPSHOT`
-.. `bin/process-docs.sh` and validate the generated `SNAPSHOT` documentation locally
-.. `bin/publish-docs.sh <username>` to publish the `SNAPSHOT` docs which enables the README to work properly.
+.. `bin/process-docs.sh` and validate the generated `SNAPSHOT` documentation locally and then `bin/publish-docs.sh <username>`
 .. Commit and push the `SNAPSHOT` changes to git
 .. Send email to advise that code freeze is lifted.
 .. Generate a list of dead branches that will be automatically deleted and post them as a DISCUSS thread for review, then once consensus is reached removed those branches.
@@ -152,7 +152,8 @@ Release & Promote
 . 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"`
 . Update homepage with references to latest distribution and to other internal links elsewhere on the page.
-. Wait for Apache Central to sync the jars and src (link:http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/[http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/]).
+. 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).
 . If there are releases present in SVN that represents lines of code that are no longer under development, then remove those releases. In other words, if `3.2.0` is present and `3.2.1` is released then remove `3.2.0`.  However, if `3.1.3` is present and that line of code is still under potential development, it may stay.
 . Announce release on `dev@`/`gremlin-users@` mailing lists and tweet from `@apachetinkerpop`
 


[13/37] tinkerpop git commit: Merge remote-tracking branch 'origin/master'

Posted by dk...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/TINKERPOP-1280
Commit: 4cabb9d118debb9e37207e57da763275891cedcf
Parents: 72ebad2 0142324
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 07:07:19 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 07:07:19 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------



[03/37] tinkerpop git commit: Add docs on submitting board reports CTR

Posted by dk...@apache.org.
Add docs on submitting board reports CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 6c26a86136d4ed5057d08601dbb80a185ba699fe
Parents: 0181d81
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 9 09:16:13 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 9 09:16:13 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/administration.asciidoc | 38 +++++++++++++++++++++
 1 file changed, 38 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6c26a861/docs/src/dev/developer/administration.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/administration.asciidoc b/docs/src/dev/developer/administration.asciidoc
index 80e1b24..e953989 100644
--- a/docs/src/dev/developer/administration.asciidoc
+++ b/docs/src/dev/developer/administration.asciidoc
@@ -132,5 +132,43 @@ elapsed, the invite may be sent to the new PMC member. If they accept, then the
 link:http://www.apache.org/dev/pmc.html#newpmc[How to Add a New PMC Member] section in the Apache docs for ho to
 complete the process. Use link:https://whimsy.apache.org/roster/committee/[Whimsy] to update PMC membership.
 
+Board Reports
+-------------
 
+The PMC Chair is responsible for submitting a link:http://www.apache.org/foundation/board/reporting[report to the board]
+on a quarterly basis. TinkerPop reports on the following months: January, April, July, October. The report has the
+following format:
+
+[source,text]
+----
+## Description:
+ Apache TinkerPop is a graph computing framework for both graph databases
+ (OLTP) and graph analytic systems (OLAP).
+
+## Activity:
+ <discuss general project health, project direction, community growth/activity, etc.>
+
+## Issues:
+ There are no issues requiring board attention at this time.
+
+## Releases:
+ - x.y.z (<month> <day>, <year>)
+ - x.y.z (<month> <day>, <year>)
+
+## PMC/Committer:
+
+ - Last PMC addition was <name> - <month> <year>
+ - Last committer addition was <name> - <month> <year>
+
+## Links
+
+[1] <hyperlink to external reference, if a reference was made in the report>
+----
+
+A draft of the report should be sent to the TinkerPop developer mailing list for review at least three days prior to
+submitting to the board. The final report should be sent in plain-text format to `board@apache.org` and should be
+committed to the appropriate meeting agenda in SVN at:
+
+[source,text]
+https://svn.apache.org/repos/private/foundation/board
 


[17/37] tinkerpop git commit: Add note for deploying gremlin-python to pypi CTR

Posted by dk...@apache.org.
Add note for deploying gremlin-python to pypi CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 1aa52f0775fefec736f501d735b19c8ce5d8d9d2
Parents: 0e42dae
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 12:12:36 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 12:12:36 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/release.asciidoc | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1aa52f07/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/release.asciidoc b/docs/src/dev/developer/release.asciidoc
index 91e397a..e1007e0 100644
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@ -153,6 +153,8 @@ that this build will occur from the tag for the release, so be sure to checkout
 . `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).


[18/37] tinkerpop git commit: Removed reference to the "appveyor" build

Posted by dk...@apache.org.
Removed reference to the "appveyor" build

per discussion on TINKERPOP-1179 CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: e0de46e7a4b8586c0000158e049a358cde32ef84
Parents: 7fa75fd
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 13:31:18 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 13:31:18 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                             |  2 +-
 appveyor.yml                                   | 14 -------
 docs/src/dev/developer/contributing.asciidoc   |  2 +-
 docs/src/dev/developer/for-committers.asciidoc | 13 ++-----
 pom.xml                                        | 41 ---------------------
 spark-gremlin/pom.xml                          | 27 --------------
 6 files changed, 6 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0de46e7/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6e43233..646e496 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,7 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 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.
 
 [[release-3-1-4]]
 TinkerPop 3.1.4 (Release Date: September 6, 2016)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0de46e7/appveyor.yml
----------------------------------------------------------------------
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 452584c..0000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: '{build}'
-
-environment:
-  matrix:
-    - JAVA_HOME: C:\Program Files\Java\jdk1.8.0
-
-os: Windows Server 2012
-
-install:
-  - cmd: choco install maven -y -f
-  - cmd: refreshenv
-
-build_script:
-  - mvn clean validate -B -Dci -fae -Dappveyor

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0de46e7/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index 456a055..0c121c8 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -204,7 +204,7 @@ on the Apache TinkerPop repository.
 .. Include a rough synopsis of how the changes were tested. This might be as simple as "Ran mvn clean install to
 success and performed manual testing in the Gremlin Console".
 .. Include other descriptive elements about the change if they are not already included in the JIRA ticket.
-.. Automated builds will occur with Travis and AppVeyor. Please be sure that the pull request passes those builds and
+.. Automated builds will occur with Travis. Please be sure that the pull request passes those builds and
 correct them if there are problems.
 
 Once the pull request has been placed it will go into *review*:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0de46e7/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 64e43ce..fa88070 100644
--- a/docs/src/dev/developer/for-committers.asciidoc
+++ b/docs/src/dev/developer/for-committers.asciidoc
@@ -122,15 +122,10 @@ be adjusted accordingly to not auto-wildcard the imports.
 Build Server
 ------------
 
-TinkerPop uses both link:https://travis-ci.com/[Travis] and link:https://www.appveyor.com/[AppVeyor] for
-link:https://en.wikipedia.org/wiki/Continuous_integration[CI] services. Travis validates builds on Ubuntu, while
-AppVeyor validates builds on Windows.  The build statuses can be found here:
-
-* link:https://travis-ci.org/apache/tinkerpop[Travis Build Status]
-* link:https://ci.appveyor.com/project/ApacheSoftwareFoundation/tinkerpop[AppVeyor Build Status]
-
-Note that the CI process does not run integration tests or include Neo4j-related tests as those tests would likely
-exceed the allowable times for builds on these servers.
+TinkerPop uses link:https://travis-ci.com/[Travis] for link:https://en.wikipedia.org/wiki/Continuous_integration[CI]
+services. The build status can be found link:https://travis-ci.org/apache/tinkerpop[here].  Note that the CI process
+does not run integration tests or include Neo4j-related tests as those tests would likely exceed the allowable times
+for builds on these servers.
 
 Deprecation
 -----------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0de46e7/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 4d0c782..2b58f6b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -266,7 +266,6 @@ limitations under the License.
                     <excludes>
                         <exclude>.travis.yml</exclude>
                         <exclude>.dockerignore</exclude>
-                        <exclude>appveyor.yml</exclude>
                         <exclude>**/.classpath</exclude>
                         <exclude>**/.project</exclude>
                         <exclude>**/.settings/**</exclude>
@@ -1062,45 +1061,5 @@ limitations under the License.
                 </plugins>
             </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</argLine>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
     </profiles>
 </project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e0de46e7/spark-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/spark-gremlin/pom.xml b/spark-gremlin/pom.xml
index b5797cb..907e57e 100644
--- a/spark-gremlin/pom.xml
+++ b/spark-gremlin/pom.xml
@@ -393,31 +393,4 @@
             </plugin>
         </plugins>
     </build>
-
-  <profiles>
-    <profile>
-        <id>appveyor</id>
-        <activation>
-            <activeByDefault>false</activeByDefault>
-            <property>
-                <name>appveyor</name>
-            </property>
-        </activation>
-    <build>
-    <plugins>
-        <plugin>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-                <excludes>
-                    <exclude>**/SparkHadoopGremlinTest*</exclude>
-                    <exclude>**/SparkGraphComputerGroovyProcessIntegrateTest*</exclude>
-                    <exclude>**/SparkGraphComputerProcessIntegrateTest*</exclude>
-                    <exclude>**/GryoSerializerIntegrateTest*</exclude>
-                </excludes>
-            </configuration>
-        </plugin>
-    </plugins>
-      </build>
-    </profile>
-  </profiles>
 </project>
\ No newline at end of file


[12/37] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

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

Conflicts:
	docs/src/dev/developer/administration.asciidoc
	giraph-gremlin/pom.xml
	gremlin-archetype/gremlin-archetype-server/pom.xml
	gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml
	gremlin-archetype/pom.xml
	gremlin-console/pom.xml
	gremlin-core/pom.xml
	gremlin-driver/pom.xml
	gremlin-groovy-test/pom.xml
	gremlin-groovy/pom.xml
	gremlin-server/pom.xml
	gremlin-shaded/pom.xml
	gremlin-test/pom.xml
	hadoop-gremlin/pom.xml
	neo4j-gremlin/pom.xml
	pom.xml
	spark-gremlin/pom.xml
	tinkergraph-gremlin/pom.xml


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

Branch: refs/heads/TINKERPOP-1280
Commit: 72ebad21dbbb41262e4ec6ebac833683e986c0e0
Parents: a1ba988 7fa75fd
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 07:06:59 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 07:06:59 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  8 ++-
 docs/src/dev/developer/administration.asciidoc  | 43 +++++++++++++++-
 docs/src/dev/developer/release.asciidoc         | 52 ++++++++++++--------
 .../upgrade/release-3.1.x-incubating.asciidoc   |  5 ++
 4 files changed, 86 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/72ebad21/docs/src/dev/developer/release.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/dev/developer/release.asciidoc
index ae8e912,f9baa94..91e397a
--- a/docs/src/dev/developer/release.asciidoc
+++ b/docs/src/dev/developer/release.asciidoc
@@@ -257,4 -266,5 +268,5 @@@ The Central Maven repo has sync'd as we
  
  https://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/xx.yy.zz/
  
- [include the release line logo]
+ [include the release line logo image]
 -----
++----


[02/37] tinkerpop git commit: Get rid of PPMC references

Posted by dk...@apache.org.
Get rid of PPMC references

Not sure why this only occurred on master CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 0181d8186214cdbfec6dfcaff6f8060ced6d0325
Parents: b8ecebe
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 9 09:15:34 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 9 09:15:34 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/administration.asciidoc | 107 ++++++++++++++------
 1 file changed, 78 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0181d818/docs/src/dev/developer/administration.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/administration.asciidoc b/docs/src/dev/developer/administration.asciidoc
index e1eb352..80e1b24 100644
--- a/docs/src/dev/developer/administration.asciidoc
+++ b/docs/src/dev/developer/administration.asciidoc
@@ -20,8 +20,8 @@ Administration
 New Committers
 --------------
 
-When a candidate is identified by a PPMC member as someone who might be a good official committer to TinkerPop, the
-PPMC member should open a DISCUSS thread on the private TinkerPop mailing list.  The thread should provide some
+When a candidate is identified by a PMC member as someone who might be a good official committer to TinkerPop, the
+PMC member should open a DISCUSS thread on the private TinkerPop mailing list.  The thread should provide some
 background and reasoning for why that member believes the candidate would be a good committer.  Given enough time for
 feedback on the candidate and presuming there is still positive interest in doing so, a VOTE thread on the private
 TinkerPop mailing list is started to get the official stance.  As per usual, the VOTE will be made open for no less
@@ -36,52 +36,101 @@ SUBJECT: Invitation to become TinkerPop committer: [candidate name]
 
 Hello,
 
-The TinkerPop Podling Project Management Committee (PPMC)  hereby offers you committer privileges to the project.
-These privileges are offered on the understanding that you'll use them reasonably and with common sense. We like to
-work on trust rather than unnecessary constraints.
+The TinkerPop Project Management Committee (PMC) hereby offers you committer
+privileges to the project. These privileges are offered on the understanding
+that you'll use them reasonably and with common sense. We like to work on
+trust rather than unnecessary constraints.
 
-Being a committer enables you to more easily make changes without needing to go through the patch submission process.
+Being a committer enables you to more easily make changes without needing to
+go through the patch submission process.
 
-Being a committer does not require you to participate any more than you already do. It does tend to make one even more
-committed.  You will probably find that you spend more time here.
+Being a committer does not require you to participate any more than you already
+do. It does tend to make one even more committed.  You will probably find that
+you spend more time here.
 
-Of course, you can decline and instead remain as a contributor, participating as you do now.
+Of course, you can decline and instead remain as a contributor, participating
+as you do now.
 
-A. This personal invitation is a chance for you to accept or decline in private.  Either way, please let us know in
-reply to the private@tinkerpop.apache.org address only.
+A. This personal invitation is a chance for you to accept or decline in
+private.  Either way, please let us know in reply to the
+private@tinkerpop.apache.org address only.
 
-B. If you are accepting, the next step is to register an iCLA with the Apache Software Foundation:
-    1. Details of the iCLA and the forms are found through this link: http://www.apache.org/licenses/#clas.
+B. If you are accepting, the next step is to register an iCLA with the Apache
+Software Foundation:
+  1. Details of the iCLA and the forms are found through this link:
+     http://www.apache.org/licenses/#clas.
 
-    2. The form (text or PDF version) provides instructions for its completion and return to the Secretary of the ASF
-       at secretary@apache.org.
+  2. The form (text or PDF version) provides instructions for its completion
+     and return to the Secretary of the ASF at secretary@apache.org.
 
-    3. When you transmit the completed iCLA, request to notify Apache TinkerPop and choose a unique Apache id.
-       Look to see if your preferred id is already taken at http://people.apache.org/committer-index.html   This will
-       allow the Secretary to notify the PMC when your iCLA has been recorded.
+  3. When you complete iCLA ensure that you include "Apache TinkerPop" in the
+     "notify project" project field and choose a preferred unique Apache id.
+     Look to see if your preferred id is already taken at
+     http://people.apache.org/committer-index.html. This will allow the
+     Secretary to notify the PMC when your iCLA has been recorded.
 
-When recording of your iCLA is noticed, you will receive a follow-up message with the next steps for establishing you
-as a committer.
+When recording of your iCLA is noticed, you will receive a follow-up message
+with the next steps for establishing you as a committer.
 ----
 
-Assuming the individual accepts, the next step is to get their account created.  As we are in incubation, we will
-need to contact a mentor for help with this step.
+Assuming the iCLA included items from step 3, the secretary will handle account creation, otherwise it will be up to
+the PMC chair to link:http://www.apache.org/dev/pmc.html#newcommitter[handle such things]. Once the account is
+established the PMC chair will then need to:
 
-Upon confirming with the new committer that their account is established, send an announcement email to the
-developer and user mailing lists:
+. Validate that the iCLA is on file either through link:https://svn.apache.org/repos/private/foundation/officers/[svn]
+or through link:http://people.apache.org/committer-index.html[people.apache.org].
+. Request that the account be created. The PMC Chair may do this through the link:http://infra.apache.org/[Account Request Form].
+. Once verified, provide the new committer access to the repository, which is most easily done through
+link:https://whimsy.apache.org/roster/committee/[Whimsy].
+. Send an announcement email to the developer and user mailing lists with the template below.
 
 [source,text]
 ----
 SUBJECT: New Committer: [committer name]
 
-The Podling Project Management Committee (PPMC) for Apache TinkerPop has asked [committer name] to become a committer
-and we are pleased to announce that he has accepted.
+The Project Management Committee (PMC) for Apache TinkerPop has asked
+[committer name] to become a committer and we are pleased to announce their
+acceptance.
 
-[describe the nature of the committers work in the community]
+[describe the nature of the committer's work in the community]
 
-Being a committer enables easier contribution to the project since there is no need to work via the patch submission
-process. This should enable better productivity.
+Being a committer enables easier contribution to the project since there is no
+need to work via the patch submission process. This should enable better
+productivity.
 ----
 
+Finally, new committers should be sent an email that covers some of the administrative elements of their new role:
+
+* link:http://www.apache.org/dev/committers.html[Apache Committer Guide]
+* link:http://www.apache.org/dev/committers.html[Apache Committer FAQ]
+* link:http://tinkerpop.apache.org/docs/current/dev/developer/[TinkerPop Developer Documentation]
+** Bring specific attention to the "committer" section which describes our general policies.
+
+New PMC Members
+---------------
+
+The process for bringing on new PMC members is not so different from the one for new committers. The process begins
+with a DISCUSS thread to the private mailing list for building consensus followed by a VOTE thread to confirm.
+Presuming the new PMC member is a committer already (which is mostly likely for TinkerPop), there should be no need for
+any additional paperwork. On successful vote however, a NOTICE should be sent to the board@apache.org (copying
+private@tinkerpop.apache.org):
+
+[source,text]
+----
+Subject [NOTICE] [name of PMC new member] for Apache TinkerPop PMC
+
+Apache TinkerPop proposes to invite [name of PMC new member] ([ApacheId]) to join the PMC.
+
+The vote result is available here:
+
+[include the link to the vote result thread from private]
+----
+
+If the candidate does not (yet) have an Apache account, then please note that fact in the notification email. Provide
+the board 72 hours to respond with objection before extending the invite to the new PMC member. Once that time has
+elapsed, the invite may be sent to the new PMC member. If they accept, then the PMC chair should refer to the
+link:http://www.apache.org/dev/pmc.html#newpmc[How to Add a New PMC Member] section in the Apache docs for ho to
+complete the process. Use link:https://whimsy.apache.org/roster/committee/[Whimsy] to update PMC membership.
+
 
 


[06/37] tinkerpop git commit: Bumping to 3.1.5-SNAPSHOT

Posted by dk...@apache.org.
Bumping to 3.1.5-SNAPSHOT


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

Branch: refs/heads/TINKERPOP-1280
Commit: 0b7da662b464a788c2a80b4971b7241a3c6af41b
Parents: 16057b1
Author: Ted Wilmes <tw...@gmail.com>
Authored: Sun Sep 11 16:37:19 2016 -0500
Committer: Ted Wilmes <tw...@gmail.com>
Committed: Sun Sep 11 16:37:19 2016 -0500

----------------------------------------------------------------------
 giraph-gremlin/pom.xml                                  | 2 +-
 gremlin-archetype/gremlin-archetype-server/pom.xml      | 2 +-
 gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml | 2 +-
 gremlin-archetype/pom.xml                               | 2 +-
 gremlin-console/pom.xml                                 | 2 +-
 gremlin-core/pom.xml                                    | 2 +-
 gremlin-driver/pom.xml                                  | 2 +-
 gremlin-groovy-test/pom.xml                             | 2 +-
 gremlin-groovy/pom.xml                                  | 2 +-
 gremlin-server/pom.xml                                  | 2 +-
 gremlin-shaded/pom.xml                                  | 2 +-
 gremlin-test/pom.xml                                    | 2 +-
 hadoop-gremlin/pom.xml                                  | 2 +-
 neo4j-gremlin/pom.xml                                   | 2 +-
 pom.xml                                                 | 2 +-
 spark-gremlin/pom.xml                                   | 2 +-
 tinkergraph-gremlin/pom.xml                             | 2 +-
 17 files changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/giraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/giraph-gremlin/pom.xml b/giraph-gremlin/pom.xml
index 2257e35..9bbb781 100644
--- a/giraph-gremlin/pom.xml
+++ b/giraph-gremlin/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>giraph-gremlin</artifactId>
     <name>Apache TinkerPop :: Giraph Gremlin</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-archetype/gremlin-archetype-server/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-archetype/gremlin-archetype-server/pom.xml b/gremlin-archetype/gremlin-archetype-server/pom.xml
index 18624b9..9d43651 100644
--- a/gremlin-archetype/gremlin-archetype-server/pom.xml
+++ b/gremlin-archetype/gremlin-archetype-server/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>gremlin-archetype</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
 
     <artifactId>gremlin-archetype-server</artifactId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml b/gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml
index 71f4f94..14a6143 100644
--- a/gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml
+++ b/gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>gremlin-archetype</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
 
     <artifactId>gremlin-archetype-tinkergraph</artifactId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-archetype/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-archetype/pom.xml b/gremlin-archetype/pom.xml
index 5e7222b..eab73f1 100644
--- a/gremlin-archetype/pom.xml
+++ b/gremlin-archetype/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <artifactId>tinkerpop</artifactId>
         <groupId>org.apache.tinkerpop</groupId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
 
     <artifactId>gremlin-archetype</artifactId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-console/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/pom.xml b/gremlin-console/pom.xml
index eeeb46e..4b5cbde 100644
--- a/gremlin-console/pom.xml
+++ b/gremlin-console/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <artifactId>tinkerpop</artifactId>
         <groupId>org.apache.tinkerpop</groupId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-console</artifactId>
     <name>Apache TinkerPop :: Gremlin Console</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-core/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-core/pom.xml b/gremlin-core/pom.xml
index 5823f38..4d4b767 100644
--- a/gremlin-core/pom.xml
+++ b/gremlin-core/pom.xml
@@ -20,7 +20,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-core</artifactId>
     <name>Apache TinkerPop :: Gremlin Core</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-driver/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-driver/pom.xml b/gremlin-driver/pom.xml
index 55c51d2..3b38ab7 100644
--- a/gremlin-driver/pom.xml
+++ b/gremlin-driver/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-driver</artifactId>
     <name>Apache TinkerPop :: Gremlin Driver</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-groovy-test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/pom.xml b/gremlin-groovy-test/pom.xml
index c31d583..90dcd98 100644
--- a/gremlin-groovy-test/pom.xml
+++ b/gremlin-groovy-test/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-groovy-test</artifactId>
     <name>Apache TinkerPop :: Gremlin Groovy Test</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-groovy/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml
index 04acfbb..3de8465 100644
--- a/gremlin-groovy/pom.xml
+++ b/gremlin-groovy/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-groovy</artifactId>
     <name>Apache TinkerPop :: Gremlin Groovy</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-server/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-server/pom.xml b/gremlin-server/pom.xml
index 2b61071..a26f2d0 100644
--- a/gremlin-server/pom.xml
+++ b/gremlin-server/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-server</artifactId>
     <name>Apache TinkerPop :: Gremlin Server</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-shaded/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-shaded/pom.xml b/gremlin-shaded/pom.xml
index 8e2338e..c52a972 100644
--- a/gremlin-shaded/pom.xml
+++ b/gremlin-shaded/pom.xml
@@ -20,7 +20,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-shaded</artifactId>
     <name>Apache TinkerPop :: Gremlin Shaded</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/gremlin-test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-test/pom.xml b/gremlin-test/pom.xml
index bb81570..17307cf 100644
--- a/gremlin-test/pom.xml
+++ b/gremlin-test/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>gremlin-test</artifactId>
     <name>Apache TinkerPop :: Gremlin Test</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/hadoop-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/pom.xml b/hadoop-gremlin/pom.xml
index 254b9f0..07da174 100644
--- a/hadoop-gremlin/pom.xml
+++ b/hadoop-gremlin/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>hadoop-gremlin</artifactId>
     <name>Apache TinkerPop :: Hadoop Gremlin</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/neo4j-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/pom.xml b/neo4j-gremlin/pom.xml
index 55245c3..dfdffe3 100644
--- a/neo4j-gremlin/pom.xml
+++ b/neo4j-gremlin/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>neo4j-gremlin</artifactId>
     <name>Apache TinkerPop :: Neo4j Gremlin</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2077a50..4d0c782 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@ limitations under the License.
     </parent>
     <groupId>org.apache.tinkerpop</groupId>
     <artifactId>tinkerpop</artifactId>
-    <version>3.1.4</version>
+    <version>3.1.5-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>Apache TinkerPop</name>
     <description>A Graph Computing Framework</description>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/spark-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/spark-gremlin/pom.xml b/spark-gremlin/pom.xml
index 833e9a5..b5797cb 100644
--- a/spark-gremlin/pom.xml
+++ b/spark-gremlin/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>spark-gremlin</artifactId>
     <name>Apache TinkerPop :: Spark Gremlin</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0b7da662/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index bf60408..8b85b12 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -21,7 +21,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.tinkerpop</groupId>
         <artifactId>tinkerpop</artifactId>
-        <version>3.1.4</version>
+        <version>3.1.5-SNAPSHOT</version>
     </parent>
     <artifactId>tinkergraph-gremlin</artifactId>
     <name>Apache TinkerPop :: TinkerGraph Gremlin</name>


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

Posted by dk...@apache.org.
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-1280
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));
     }
 


[14/37] tinkerpop git commit: Update script for the docs was using the version from `pom.xml` in its commit message, but actually chooses the right version from SVN. This commit fixes the commit message.

Posted by dk...@apache.org.
Update script for the docs was using the version from `pom.xml` in its commit message, but actually chooses the right version from SVN.
This commit fixes the commit message.

CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 2500ba97c0d3e2587cde011cd021ad7e1c9f1735
Parents: 0142324
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Sep 12 13:15:56 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Sep 12 13:15:56 2016 +0200

----------------------------------------------------------------------
 bin/update-current-docs.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2500ba97/bin/update-current-docs.sh
----------------------------------------------------------------------
diff --git a/bin/update-current-docs.sh b/bin/update-current-docs.sh
index 2169583..84ee75c 100755
--- a/bin/update-current-docs.sh
+++ b/bin/update-current-docs.sh
@@ -31,7 +31,7 @@ read -s -p "Password for SVN user ${USERNAME}: " PASSWORD
 echo
 
 SVN_CMD="svn --no-auth-cache --username=${USERNAME} --password=${PASSWORD}"
-VERSION=$(cat pom.xml | grep -A1 '<artifactId>tinkerpop</artifactId>' | grep '<version>' | awk -F '>' '{print $2}' | awk -F '<' '{print $1}')
+CURRENT=""
 
 mkdir -p target/svn
 rm -rf target/svn/*
@@ -53,5 +53,5 @@ do
 done
 
 ${SVN_CMD} add * --force
-${SVN_CMD} commit -m "Deploy docs for TinkerPop ${VERSION}"
+${SVN_CMD} commit -m "Deploy docs for TinkerPop ${CURRENT}"
 popd


[26/37] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by dk...@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/a879702d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a879702d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a879702d

Branch: refs/heads/TINKERPOP-1280
Commit: a879702d2f03161d5319ff3fc0d83b4908326324
Parents: 2492a3a e81f772
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Sep 13 09:54:01 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Sep 13 09:54:01 2016 -0400

----------------------------------------------------------------------
 docs/src/reference/implementations-neo4j.asciidoc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[15/37] tinkerpop git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tinkerpop

Posted by dk...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tinkerpop


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

Branch: refs/heads/TINKERPOP-1280
Commit: 422263009412a3d08c5fc6e781da4f3f9a129f57
Parents: 2500ba9 4cabb9d
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Sep 12 13:17:50 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Sep 12 13:17:50 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  8 ++-
 docs/src/dev/developer/administration.asciidoc  | 43 +++++++++++++++-
 docs/src/dev/developer/release.asciidoc         | 52 ++++++++++++--------
 .../upgrade/release-3.1.x-incubating.asciidoc   |  5 ++
 4 files changed, 86 insertions(+), 22 deletions(-)
----------------------------------------------------------------------



[21/37] tinkerpop git commit: Added a warning message for BLVP.

Posted by dk...@apache.org.
Added a warning message for BLVP.


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

Branch: refs/heads/TINKERPOP-1280
Commit: 285ecbbe1bc2c4ac7777cea6987a40e99e108522
Parents: 7fa75fd
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 00:10:03 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 00:10:03 2016 +0200

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/285ecbbe/docs/src/reference/the-graphcomputer.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graphcomputer.asciidoc b/docs/src/reference/the-graphcomputer.asciidoc
index 453b62e..9cbef01 100644
--- a/docs/src/reference/the-graphcomputer.asciidoc
+++ b/docs/src/reference/the-graphcomputer.asciidoc
@@ -383,6 +383,11 @@ NOTE: A custom `BulkLoader` implementation for incremental loading should use `G
 elements (e.g. `g.addV()` instead of `graph.addVertex()`). This way the `BulkLoaderVertexProgram` is able to efficiently
 track changes in the underlying graph and can apply several optimization techniques.
 
+WARNING: Edges in the input graph must be present in both directions, e.g. from the source vertex to the target vertex
+as an out-edge and from the target vertex to the source vertex as an in-edge. This is especially important if the input
+graph is a `HadoopGraph`. `BulkLoaderVertexProgram` will likely fail with a `FastNoSuchElementException` if one of the
+edges is missing.
+
 [[traversalvertexprogram]]
 TraversalVertexProgram
 ~~~~~~~~~~~~~~~~~~~~~~


[34/37] tinkerpop git commit: Minor formatting fixes to dev docs CTR

Posted by dk...@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-1280
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


[04/37] tinkerpop git commit: Fix header formatting issues to remove asciidoc warnings CTR

Posted by dk...@apache.org.
Fix header formatting issues to remove asciidoc warnings CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 74a173d2d71efbfea40bfebba775881a07952cb8
Parents: 6c26a86
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 9 09:44:15 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 9 09:44:15 2016 -0400

----------------------------------------------------------------------
 docs/src/index.asciidoc | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/74a173d2/docs/src/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/index.asciidoc b/docs/src/index.asciidoc
index 75d4fbe..7bc7111 100644
--- a/docs/src/index.asciidoc
+++ b/docs/src/index.asciidoc
@@ -20,7 +20,7 @@ image::apache-tinkerpop-logo.png[width=500]
 *x.y.z*
 
 TinkerPop Compendium
-====================
+--------------------
 
 image::tinkerpop-reading.png[width=800,align="center"]
 
@@ -43,7 +43,7 @@ Note the "+" following the link in each table entry - it forces an asciidoc line
 
 [[tutorials]]
 Tutorials
----------
+~~~~~~~~~
 
 [width="100%",cols="<.<3,<.^10",grid="none"]
 |=========================================================
@@ -60,7 +60,7 @@ and an overview of Gremlin. (*external*)
 
 [[publications]]
 Publications
-------------
+~~~~~~~~~~~~
 
 Unless otherwise noted, all "publications" are externally managed:
 
@@ -76,7 +76,7 @@ Unless otherwise noted, all "publications" are externally managed:
 
 [[developer]]
 Developer
----------
+~~~~~~~~~
 
 [width="100%",cols="<.<3,<.^10",grid="none"]
 |=========================================================


[07/37] tinkerpop git commit: Merge branch 'post-tp31' into tp31

Posted by dk...@apache.org.
Merge branch 'post-tp31' into tp31


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

Branch: refs/heads/TINKERPOP-1280
Commit: 1e3c950b877678fbd20b201544f65126a917fffc
Parents: 0b7da66 9337e49
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sun Sep 11 18:39:26 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sun Sep 11 18:39:26 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/administration.asciidoc | 145 ++++++++++++++++----
 docs/src/dev/developer/release.asciidoc        |  45 +++---
 docs/src/index.asciidoc                        |   8 +-
 3 files changed, 148 insertions(+), 50 deletions(-)
----------------------------------------------------------------------



[22/37] tinkerpop git commit: added Path object and GraphSON desrialization for g:Path in Gremlin-Python. Added test cases to ensure both Path semantics and Path deserialization.

Posted by dk...@apache.org.
added Path object and GraphSON desrialization for g:Path in Gremlin-Python. Added test cases to ensure both Path semantics and Path deserialization.


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

Branch: refs/heads/TINKERPOP-1280
Commit: 144a7cdde6fa04c8a2897445cbea005d8a692869
Parents: 0e4e8a1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Sep 12 16:13:27 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Sep 12 16:13:27 2016 -0600

----------------------------------------------------------------------
 .../jython/gremlin_python/structure/graph.py    | 32 ++++++++++++++++++++
 .../gremlin_python/structure/io/graphson.py     | 16 +++++++++-
 .../jython/tests/structure/io/test_graphson.py  | 13 ++++++++
 .../main/jython/tests/structure/test_graph.py   | 27 ++++++++++++++++-
 4 files changed, 86 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/144a7cdd/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index 22403b6..b60dc65 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -88,3 +88,35 @@ class Property(object):
 
     def __hash__(self):
         return hash(self.key) + hash(self.value)
+
+
+class Path(object):
+    def __init__(self, labels, objects):
+        self.labels = labels
+        self.objects = objects
+
+    def __repr__(self):
+        return str(self.objects)
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.objects == other.objects and self.labels == other.labels
+
+    def __hash__(self):
+        return hash(str(self.objects)) + hash(str(self.labels))
+
+    def __getitem__(self, key):
+        if isinstance(key, str):
+            objects = []
+            for i, labels in enumerate(self.labels):
+                if key in labels:
+                    objects.append(self.objects[i])
+            if 0 == len(objects):
+                raise Error("The step with label " + key + " does not exist")
+            return objects if len(objects) > 1 else objects[0]
+        elif isinstance(key, int):
+            return self.objects[key]
+        else:
+            raise Error("The step with label " + key + " does not exist")
+
+    def __len__(self):
+        return len(self.objects)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/144a7cdd/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 dcc6976..fd13ae9 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
@@ -37,6 +37,7 @@ from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import VertexProperty
+from gremlin_python.structure.graph import Path
 
 
 class GraphSONWriter(object):
@@ -247,6 +248,18 @@ class PropertyDeserializer(GraphSONDeserializer):
         return Property(value["key"], GraphSONReader._objectify(value["value"]))
 
 
+class PathDeserializer(GraphSONDeserializer):
+    def _objectify(self, dict):
+        value = dict[_SymbolHelper._VALUE]
+        labels = []
+        objects = []
+        for label in value["labels"]:
+            labels.append(set(label))
+        for object in value["objects"]:
+            objects.append(GraphSONReader._objectify(object))
+        return Path(labels, objects)
+
+
 class _SymbolHelper(object):
     symbolMap = {"global_": "global", "as_": "as", "in_": "in", "and_": "and",
                  "or_": "or", "is_": "is", "not_": "not", "from_": "from",
@@ -286,5 +299,6 @@ deserializers = {
     "g:Vertex": VertexDeserializer(),
     "g:Edge": EdgeDeserializer(),
     "g:VertexProperty": VertexPropertyDeserializer(),
-    "g:Property": PropertyDeserializer()
+    "g:Property": PropertyDeserializer(),
+    "g:Path": PathDeserializer()
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/144a7cdd/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 3153fd6..cae1a53 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
@@ -24,6 +24,7 @@ import unittest
 from unittest import TestCase
 
 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
 
@@ -67,6 +68,18 @@ class TestGraphSONReader(TestCase):
         assert isinstance(vertex.id, int)
         assert vertex == Vertex(1)
 
+    def test_path(self):
+        path = GraphSONReader.readObject(
+            """{"@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)
+        assert Vertex(1) == path[0]
+        assert Vertex(1) == path["a"]
+        assert "lop" == path[2]
+        assert 3 == len(path)
+
+
 class TestGraphSONWriter(TestCase):
     def test_numbers(self):
         assert """{"@type":"g:Int32","@value":1}""" == GraphSONWriter.writeObject(1)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/144a7cdd/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 6025802..bb0d284 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -26,10 +26,11 @@ from gremlin_python.structure.graph import Edge
 from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import VertexProperty
+from gremlin_python.structure.graph import Path
 
 
 class TestGraph(TestCase):
-    def testGraphObjects(self):
+    def test_graph_objects(self):
         vertex = Vertex(1)
         assert "v[1]" == str(vertex)
         assert "vertex" == vertex.label
@@ -69,6 +70,30 @@ class TestGraph(TestCase):
                     assert i == j
                     assert i.__hash__() == hash(i)
 
+    def test_path(self):
+        path = Path([set(["a", "b"]), set(["c", "b"]), set([])], [1, Vertex(1), "hello"])
+        assert "[1, v[1], 'hello']" == str(path)
+        assert 1 == path["a"]
+        assert Vertex(1) == path["c"]
+        assert [1, Vertex(1)] == path["b"]
+        assert path[0] == 1
+        assert path[1] == Vertex(1)
+        assert path[2] == "hello"
+        assert 3 == len(path)
+        try:
+            temp = path[3]
+            raise Exception("Accessing beyond the list index should throw an error")
+        except IndexError:
+            pass
+        #
+        assert path == path
+        assert hash(path) == hash(path)
+        path2 = Path([set(["a", "b"]), set(["c", "b"]), set([])], [1, Vertex(1), "hello"])
+        assert path == path2
+        assert hash(path) == hash(path2)
+        assert path != Path([set(["a"]), set(["c", "b"]), set([])], [1, Vertex(1), "hello"])
+        assert path != Path([set(["a", "b"]), set(["c", "b"]), set([])], [3, Vertex(1), "hello"])
+
 
 if __name__ == '__main__':
     unittest.main()


[24/37] tinkerpop git commit: Added warning message for BLVP.

Posted by dk...@apache.org.
Added warning message for BLVP.


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

Branch: refs/heads/TINKERPOP-1280
Commit: 2492a3a3ce70062f2e82658f0af446f94149d84f
Parents: 0e4e8a1
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Sep 13 01:53:35 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Sep 13 01:53:35 2016 +0200

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


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2492a3a3/docs/src/reference/the-graphcomputer.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graphcomputer.asciidoc b/docs/src/reference/the-graphcomputer.asciidoc
index 9b54aa8..8deccee 100644
--- a/docs/src/reference/the-graphcomputer.asciidoc
+++ b/docs/src/reference/the-graphcomputer.asciidoc
@@ -436,6 +436,11 @@ NOTE: A custom `BulkLoader` implementation for incremental loading should use `G
 elements (e.g. `g.addV()` instead of `graph.addVertex()`). This way the `BulkLoaderVertexProgram` is able to efficiently
 track changes in the underlying graph and can apply several optimization techniques.
 
+WARNING: Edges in the input graph must be present in both directions, e.g. from the source vertex to the target vertex
+as an out-edge and from the target vertex to the source vertex as an in-edge. This is especially important if the input
+graph is a `HadoopGraph`. `BulkLoaderVertexProgram` will likely fail with a `FastNoSuchElementException` if one of the
+edges is missing.
+
 [[traversalvertexprogram]]
 TraversalVertexProgram
 ~~~~~~~~~~~~~~~~~~~~~~


[29/37] tinkerpop git commit: fixed hardcoded link

Posted by dk...@apache.org.
fixed hardcoded link


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

Branch: refs/heads/TINKERPOP-1280
Commit: d3dd2c190722a516812f246ec304938b69583355
Parents: e81f772
Author: Robert Dale <ro...@gmail.com>
Authored: Thu Sep 8 11:38:01 2016 -0400
Committer: Robert Dale <ro...@gmail.com>
Committed: Tue Sep 13 12:17:40 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/d3dd2c19/docs/src/tutorials/getting-started/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/getting-started/index.asciidoc b/docs/src/tutorials/getting-started/index.asciidoc
index 146eb01..3ac80ce 100644
--- a/docs/src/tutorials/getting-started/index.asciidoc
+++ b/docs/src/tutorials/getting-started/index.asciidoc
@@ -216,7 +216,7 @@ v1.addEdge("created", v2, id, 9, "weight", 0.4)
 
 NOTE: The fully qualified name for `T` is `org.apache.tinkerpop.gremlin.structure.T`. Another important static import
 that is often seen in Gremlin comes from `org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__`, which allows
-for the creation of link:http://tinkerpop.apache.org/docs/3.1.1-SNAPSHOT/reference/#graph-traversal-steps[anonymous traversals].
+for the creation of link:http://tinkerpop.apache.org/docs/x.y.z/reference/#graph-traversal-steps[anonymous traversals].
 
 Second, don't forget that you are working with TinkerGraph which allows for identifier assignment. That is _not_ the
 case with most graph databases.


[19/37] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

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

Conflicts:
	pom.xml


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

Branch: refs/heads/TINKERPOP-1280
Commit: 2c5733111b2c60b2e17d7ccd1fd83fff727335d4
Parents: 1aa52f0 e0de46e
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 13:42:03 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 13:42:03 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                             |  2 +-
 appveyor.yml                                   | 14 -----------
 docs/src/dev/developer/contributing.asciidoc   |  2 +-
 docs/src/dev/developer/for-committers.asciidoc | 13 +++-------
 pom.xml                                        |  1 -
 spark-gremlin/pom.xml                          | 27 ---------------------
 6 files changed, 6 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


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

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

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2c573311/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2c573311/spark-gremlin/pom.xml
----------------------------------------------------------------------


[33/37] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by dk...@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-1280
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
----------------------------------------------------------------------


[09/37] tinkerpop git commit: Prepare changelog/upgrade docs for 3.1.5

Posted by dk...@apache.org.
Prepare changelog/upgrade docs for 3.1.5


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

Branch: refs/heads/TINKERPOP-1280
Commit: 239a10a4d6265592baa9fd8590688519768da430
Parents: 19873b5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 06:40:43 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 06:40:43 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                 | 4 ++--
 docs/src/upgrade/release-3.1.x-incubating.asciidoc | 5 +++++
 2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/239a10a4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index cf44d2f..6e43233 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,8 +23,8 @@ TinkerPop 3.1.0 (A 187 On The Undercover Gremlinz)
 image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-gangster.png[width=185]
 
 [[release-3-1-5]]
-TinkerPop 3.1.5 (NOT OFFICIALLY RELEASED YET)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/239a10a4/docs/src/upgrade/release-3.1.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.1.x-incubating.asciidoc b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
index d3fbd29..154c344 100644
--- a/docs/src/upgrade/release-3.1.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
@@ -25,6 +25,11 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.1.4
 ---------------
 
+*Release Date: NOT OFFICIALLY RELEASED YET*
+
+TinkerPop 3.1.4
+---------------
+
 *Release Date: September 6, 2016*
 
 Please see the link:https://github.com/apache/tinkerpop/blob/3.1.4/CHANGELOG.asciidoc#tinkerpop-314-release-date-september-6-2016[changelog] for a complete list of all the modifications that are part of this release.


[30/37] tinkerpop git commit: fixed a JavaTranslator bug where Bytecode instructions were being mutated during translation. This is because I was accessing an Object[] and not cloning it first. Dar. Added BytecodeTest which tests hashCode/equality/bindin

Posted by dk...@apache.org.
fixed a JavaTranslator bug where Bytecode instructions were being mutated during translation. This is because I was accessing an Object[] and not cloning it first. Dar. Added BytecodeTest which tests hashCode/equality/bindings/clone/etc. Also, for @spmallette, I added a bytecode cache benchmark to TinkerGraphPlayTest.testPlay8(). CTR.


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

Branch: refs/heads/TINKERPOP-1280
Commit: 13782aad50b3a41c252cab0f7d45ce76b359eb59
Parents: d659e15
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 13:04:44 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 13:04:44 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../gremlin/jsr223/JavaTranslator.java          | 37 ++++----
 .../gremlin/process/traversal/BytecodeTest.java | 97 ++++++++++++++++++++
 .../structure/TinkerGraphPlayTest.java          | 59 +++++++-----
 4 files changed, 155 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/13782aad/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 9998a24..24ed601 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 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.
 * Added missing `InetAddress` to GraphSON extension module.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/13782aad/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 c39896c..dac6583 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
@@ -116,43 +116,46 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
                 }
             }
         }
-        ///
+        // create a copy of the argument array so as not to mutate the original bytecode
+        final Object[] argumentsCopy = new Object[arguments.length];
         for (int i = 0; i < arguments.length; i++) {
             if (arguments[i] instanceof Bytecode.Binding)
-                arguments[i] = ((Bytecode.Binding) arguments[i]).value();
+                argumentsCopy[i] = ((Bytecode.Binding) arguments[i]).value();
             else if (arguments[i] instanceof Bytecode)
-                arguments[i] = translateFromAnonymous((Bytecode) arguments[i]);
+                argumentsCopy[i] = translateFromAnonymous((Bytecode) arguments[i]);
+            else
+                argumentsCopy[i] = arguments[i];
         }
         try {
             for (final Method method : methodCache.get(methodName)) {
                 if (returnType.isAssignableFrom(method.getReturnType())) {
-                    if (method.getParameterCount() == arguments.length || (method.getParameterCount() > 0 && method.getParameters()[method.getParameters().length - 1].isVarArgs())) {
+                    if (method.getParameterCount() == argumentsCopy.length || (method.getParameterCount() > 0 && method.getParameters()[method.getParameters().length - 1].isVarArgs())) {
                         final Parameter[] parameters = method.getParameters();
                         final Object[] newArguments = new Object[parameters.length];
                         boolean found = true;
                         for (int i = 0; i < parameters.length; i++) {
                             if (parameters[i].isVarArgs()) {
                                 final Class<?> parameterClass = parameters[i].getType().getComponentType();
-                                if (arguments.length > i && !parameterClass.isAssignableFrom(arguments[i].getClass())) {
+                                if (argumentsCopy.length > i && !parameterClass.isAssignableFrom(argumentsCopy[i].getClass())) {
                                     found = false;
                                     break;
                                 }
-                                Object[] varArgs = (Object[]) Array.newInstance(parameterClass, arguments.length - i);
+                                Object[] varArgs = (Object[]) Array.newInstance(parameterClass, argumentsCopy.length - i);
                                 int counter = 0;
-                                for (int j = i; j < arguments.length; j++) {
-                                    varArgs[counter++] = arguments[j];
+                                for (int j = i; j < argumentsCopy.length; j++) {
+                                    varArgs[counter++] = argumentsCopy[j];
                                 }
                                 newArguments[i] = varArgs;
                                 break;
                             } else {
-                                if (i < arguments.length &&
-                                        (parameters[i].getType().isAssignableFrom(arguments[i].getClass()) ||
+                                if (i < argumentsCopy.length &&
+                                        (parameters[i].getType().isAssignableFrom(argumentsCopy[i].getClass()) ||
                                                 (parameters[i].getType().isPrimitive() &&
-                                                        (Number.class.isAssignableFrom(arguments[i].getClass()) ||
-                                                                arguments[i].getClass().equals(Boolean.class) ||
-                                                                arguments[i].getClass().equals(Byte.class) ||
-                                                                arguments[i].getClass().equals(Character.class))))) {
-                                    newArguments[i] = arguments[i];
+                                                        (Number.class.isAssignableFrom(argumentsCopy[i].getClass()) ||
+                                                                argumentsCopy[i].getClass().equals(Boolean.class) ||
+                                                                argumentsCopy[i].getClass().equals(Byte.class) ||
+                                                                argumentsCopy[i].getClass().equals(Character.class))))) {
+                                    newArguments[i] = argumentsCopy[i];
                                 } else {
                                     found = false;
                                     break;
@@ -166,8 +169,8 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
                 }
             }
         } catch (final Throwable e) {
-            throw new IllegalStateException(e.getMessage() + ":" + methodName + "(" + Arrays.toString(arguments) + ")", e);
+            throw new IllegalStateException(e.getMessage() + ":" + methodName + "(" + Arrays.toString(argumentsCopy) + ")", e);
         }
-        throw new IllegalStateException("Could not locate method: " + delegate.getClass().getSimpleName() + "." + methodName + "(" + Arrays.toString(arguments) + ")");
+        throw new IllegalStateException("Could not locate method: " + delegate.getClass().getSimpleName() + "." + methodName + "(" + Arrays.toString(argumentsCopy) + ")");
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/13782aad/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
new file mode 100644
index 0000000..0b9c65a
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
@@ -0,0 +1,97 @@
+/*
+ *  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.traversal;
+
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.structure.Column;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class BytecodeTest {
+
+    @Test
+    public void shouldHaveProperHashAndEquality() {
+        final GraphTraversalSource g = EmptyGraph.instance().traversal();
+        final Traversal.Admin traversal1 = g.V().out().repeat(__.out().in()).times(2).groupCount().by(__.outE().count()).select(Column.keys).order().by(Order.decr).asAdmin();
+        final Traversal.Admin traversal2 = g.V().out().repeat(__.out().in()).times(2).groupCount().by(__.outE().count()).select(Column.keys).order().by(Order.decr).asAdmin();
+        final Traversal.Admin traversal3 = g.V().out().repeat(__.out().in()).times(2).groupCount().by(__.outE().count()).select(Column.values).order().by(Order.decr).asAdmin();
+
+        assertEquals(traversal1, traversal2);
+        assertNotEquals(traversal1, traversal3);
+        assertNotEquals(traversal2, traversal3);
+        //
+        assertEquals(traversal1.hashCode(), traversal2.hashCode());
+        assertNotEquals(traversal1.hashCode(), traversal3.hashCode());
+        assertNotEquals(traversal2.hashCode(), traversal3.hashCode());
+        //
+        assertEquals(traversal1.getBytecode(), traversal2.getBytecode());
+        assertNotEquals(traversal1.getBytecode(), traversal3.getBytecode());
+        assertNotEquals(traversal2.getBytecode(), traversal3.getBytecode());
+        //
+        assertEquals(traversal1.getBytecode().hashCode(), traversal2.getBytecode().hashCode());
+        assertNotEquals(traversal1.getBytecode().hashCode(), traversal3.getBytecode().hashCode());
+        assertNotEquals(traversal2.getBytecode().hashCode(), traversal3.getBytecode().hashCode());
+
+    }
+
+    @Test
+    public void shouldCloneCorrectly() {
+        final GraphTraversalSource g = EmptyGraph.instance().traversal();
+        final Bytecode bytecode = g.V().out().asAdmin().getBytecode();
+        final Bytecode bytecodeClone = bytecode.clone();
+        assertEquals(bytecode, bytecodeClone);
+        assertEquals(bytecode.hashCode(), bytecodeClone.hashCode());
+        bytecodeClone.addStep("in", "created"); // mutate the clone and the original should stay the same
+        assertNotEquals(bytecode, bytecodeClone);
+        assertNotEquals(bytecode.hashCode(), bytecodeClone.hashCode());
+        assertEquals(2, IteratorUtils.count(bytecode.getInstructions()));
+        assertEquals(3, IteratorUtils.count(bytecodeClone.getInstructions()));
+    }
+
+    @Test
+    public void shouldIncludeBindingsInEquality() {
+        final Bindings b = new Bindings();
+        final GraphTraversalSource g = EmptyGraph.instance().traversal().withBindings(b);
+
+        final Bytecode bytecode1 = g.V().out(b.of("a", "created")).asAdmin().getBytecode();
+        final Bytecode bytecode2 = g.V().out(b.of("a", "knows")).asAdmin().getBytecode();
+        final Bytecode bytecode3 = g.V().out(b.of("b", "knows")).asAdmin().getBytecode();
+        final Bytecode bytecode4 = g.V().out(b.of("b", "knows")).asAdmin().getBytecode();
+
+        assertNotEquals(bytecode1, bytecode2);
+        assertNotEquals(bytecode1, bytecode3);
+        assertNotEquals(bytecode2, bytecode3);
+        assertNotEquals(bytecode2, bytecode4);
+        assertNotEquals(bytecode1, bytecode4);
+        assertEquals(bytecode3, bytecode4);
+
+        assertEquals(1, bytecode1.getBindings().size());
+        assertEquals("created", bytecode1.getBindings().get("a"));
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/13782aad/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
index 9f2b12a..94fd250 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
@@ -22,29 +22,30 @@ import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
 import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy;
+import org.apache.tinkerpop.gremlin.structure.Column;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLIo;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
 import org.apache.tinkerpop.gremlin.util.TimeUtil;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.function.Supplier;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.P.lt;
@@ -61,7 +62,6 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.union;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.valueMap;
-import static org.apache.tinkerpop.gremlin.util.function.Lambda.function;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -73,24 +73,39 @@ public class TinkerGraphPlayTest {
     @Ignore
     public void testPlay8() throws Exception {
         Graph graph = TinkerFactory.createModern();
-        GraphTraversalSource g = graph.traversal().withComputer();
+        GraphTraversalSource g = graph.traversal();
 
-        Traversal<?, ?> traversal1 = g.V().has("age", P.gt(10).and(P.lt(30))).out("knows", "created").repeat(__.as("a").out().as("b").hasLabel("software")).times(1).select("b").by(T.label).groupCount().map(function("a.get()"));
-        Bytecode bytecode1 = traversal1.asAdmin().getBytecode();
-        System.out.println("BYTECODE 1: \n  " + bytecode1 + "\n");
-        final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        GraphSONWriter.build().create().writeObject(outputStream, bytecode1);
-        //
-        System.out.println("GRAPHSON BYTECODE: \n  " + new String(outputStream.toByteArray()) + "\n");
-        //
-        Traversal<?, ?> traversal2 = JavaTranslator.of(graph.traversal()).translate(GraphSONReader.build().create().readObject(new ByteArrayInputStream(outputStream.toByteArray()), Bytecode.class));
-        Bytecode bytecode2 = traversal2.asAdmin().getBytecode();
-        System.out.println("BYTECODE 2: \n  " + bytecode2 + "\n");
-        assert traversal1.equals(traversal2);
-        assert bytecode1.equals(bytecode2);
-        System.out.println("RESULT: \n  " + traversal2.toList());
-    }
+        final Traversal<?, ?> traversal = g.V().repeat(out()).times(2).groupCount().by("name").select(Column.keys).order().by(Order.decr);
+        final Bytecode bytecode = traversal.asAdmin().getBytecode();
+
+        final Map<Bytecode, Traversal.Admin<?, ?>> cache = new HashMap<>();
+        cache.put(bytecode, traversal.asAdmin());
+        final HashSet<?> result = new LinkedHashSet<>(Arrays.asList("ripple", "lop"));
 
+        System.out.println("BYTECODE: " + bytecode + "\n");
+        System.out.println("Bytecode->Traversal.clone() cache: " + TimeUtil.clock(1000, () -> {
+            final Traversal.Admin<?, ?> t = cache.get(bytecode).clone();
+            //assertEquals(result, t.next());
+        }));
+
+        System.out.println("Bytecode->JavaTranslator call    : " + TimeUtil.clock(1000, () -> {
+            final Traversal t = JavaTranslator.of(g).translate(bytecode);
+            //assertEquals(result, t.next());
+        }));
+
+        System.out.println("\n==Second test with reversed execution==\n");
+
+        System.out.println("BYTECODE: " + bytecode + "\n");
+        System.out.println("Bytecode->JavaTranslator call    : " + TimeUtil.clock(1000, () -> {
+            final Traversal t = JavaTranslator.of(g).translate(bytecode);
+            //assertEquals(result, t.next());
+        }));
+
+        System.out.println("Bytecode->Traversal.clone() cache: " + TimeUtil.clock(1000, () -> {
+            final Traversal.Admin<?, ?> t = cache.get(bytecode).clone();
+            //assertEquals(result, t.next());
+        }));
+    }
 
     @Test
     @Ignore


[27/37] tinkerpop git commit: added more test cases and better error handling for Gremlin-Python test. Also went through the Gremlin-Python docs and tweaked a little here and there. Path is lookin' good.

Posted by dk...@apache.org.
added more test cases and better error handling for Gremlin-Python test. Also went through the Gremlin-Python docs and tweaked a little here and there. Path is lookin' good.


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

Branch: refs/heads/TINKERPOP-1280
Commit: 9050ad1b1d17ac60d260411720f4e46a716dbe64
Parents: 144a7cd
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 09:03:41 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 09:03:41 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                               |  1 +
 docs/src/reference/gremlin-variants.asciidoc     | 12 ++++++------
 docs/src/reference/intro.asciidoc                | 14 +++++++-------
 .../jython/gremlin_python/structure/graph.py     |  4 ++--
 .../main/jython/tests/structure/test_graph.py    | 19 ++++++++++++++++++-
 5 files changed, 34 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9050ad1b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 7035b5e..9998a24 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
 * Added missing `InetAddress` to GraphSON extension module.
 
 [[release-3-2-2]]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9050ad1b/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 0673867..bf9df2e 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -118,13 +118,13 @@ $ bin/gremlin-server.sh conf/gremlin-server-modern-py.yaml
 NOTE: The command to use `-i` need only be executed once to gather `gremlin-python` dependencies into Gremlin Servers'
 path. Future starts of Gremlin Server will not require that command.
 
-Within the CPython console, it is possible to evaluate the following.
+Within the CPython console, an empty `Graph` is created and a traversal source is spawned with `RemoteStrategy`.
 
 [source,python]
 >>> graph = Graph()
 >>> g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
 
-When a traversal spawned from the `GraphTraversalSource` above is iterated, the traveral's `Bytecode` is sent over the wire
+When a traversal from the `GraphTraversalSource` is iterated, the traversal's `Bytecode` is sent over the wire
 via the registered `RemoteConnection`. The bytecode is used to construct the equivalent traversal at the remote traversal source.
 Moreover, typically the bytecode is analyzed to determine which language the bytecode should be translated to. If the traversal
 does not contain lambdas, the remote location (e.g. Gremlin Server) will typically
@@ -138,7 +138,7 @@ RemoteConnection Submission
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 There are various ways to submit a traversal to a `RemoteConnection`. Just as in Gremlin-Java, there are various
-"action methods" off of `Traversal`.
+"terminal/action methods" off of `Traversal`.
 
 * `Traversal.next()`
 * `Traversal.nextTraverser()`
@@ -183,7 +183,7 @@ These can be used analogously to how they are used in Gremlin-Java.
 g.V().hasLabel('person').has('age',P.gt(30)).order().by('age',Order.decr).toList()
 ----
 
-Moreover, by importing the `statics` of Gremlin-Python, the class prefixes can be removed.
+Moreover, by importing the `statics` of Gremlin-Python, the class prefixes can be ommitted.
 
 [source,python]
 >>> statics.load_statics(globals())
@@ -209,7 +209,7 @@ Bindings
 When a traversal bytecode is sent over a `RemoteConnection` (e.g. Gremlin Server), it will be translated, compiled, and then executed.
 If the same traversal is sent again, translation and compilation can be skipped as the previously compiled version should be cached.
 Many traversals are unique up to some parameterization. For instance, `g.V(1).out('created').name` is considered different
-from `g.V(4).out('created').name'` as they are different "string" scripts. However, `g.V(x).out('created').name` with bindings of `{x : 1}` and
+from `g.V(4).out('created').name'` as they have different script "string" representations. However, `g.V(x).out('created').name` with bindings of `{x : 1}` and
 `{x : 4}` are considered the same. If a traversal is going to be executed repeatedly, but with different parameters, then bindings should be used.
 In Gremlin-Python, bindings are 2-tuples and used as follows.
 
@@ -219,7 +219,7 @@ g.V(('id',1)).out('created').name.toList()
 g.V(('id',4)).out('created').name.toList()
 ----
 
-NOTE: The Gremlin `withBindings()` traversal source step is not needed. This is only required
+NOTE: The Gremlin `withBindings()` traversal source step is not needed. Typically `withBindings()` is only required
 in statically typed languages where bindings need to have the same typing as the `Traversal` API. However, if desired,
 it is possible to use the `withBindings()`-model as Gremlin-Python's `Bindings.of()` simply returns a 2-tuple of `(str,object)`
 (see <<connecting-via-remotegraph,`Bindings`>>).

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9050ad1b/docs/src/reference/intro.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/intro.asciidoc b/docs/src/reference/intro.asciidoc
index d38e23b..f7a32ce 100644
--- a/docs/src/reference/intro.asciidoc
+++ b/docs/src/reference/intro.asciidoc
@@ -342,17 +342,17 @@ On Gremlin Language Variants
 ----------------------------
 
 Gremlin is written in Java 8. There are various language variants of Gremlin such as Gremlin-Groovy (packaged with
-TinkerPop3), link:https://github.com/mpollmeier/gremlin-scala[Gremlin-Scala], Gremlin-JavaScript, Gremlin-Clojure
-(known as link:https://github.com/clojurewerkz/ogre[Ogre]), etc. It is best to think of Gremlin as a style of graph
-traversing that is not bound to a particular programming language per se. Within a programming language familiar to
-the developer, there is a Gremlin variant that they can use that leverages the idioms of that language. At minimum,
-a programming language providing a Gremlin implementation must support
+TinkerPop3), Gremlin-Python (packaged with TinkerPop3), link:https://github.com/mpollmeier/gremlin-scala[Gremlin-Scala],
+Gremlin-JavaScript, Gremlin-Clojure (known as link:https://github.com/clojurewerkz/ogre[Ogre]), etc.
+It is best to think of Gremlin as a style of graph traversing that is not bound to a particular programming language per se.
+Within a programming language familiar to the developer, there is a Gremlin variant that they can use that leverages
+the idioms of that language. At minimum, a programming language providing a Gremlin implementation must support
 link:http://en.wikipedia.org/wiki/Method_chaining[function chaining] (with
 link:http://en.wikipedia.org/wiki/Anonymous_function[lambdas/anonymous functions] being a "nice to have" if the
-variant wishes to offer arbitrary computations beyond the provided Gremlin steps).
+variants wishes to offer arbitrary computations beyond the provided Gremlin steps).
 
 Throughout the documentation, the examples provided are primarily written in Gremlin-Groovy. The reason for this is
-the <<gremlin-console,Gremlin Console>> whereby an interactive programming environment exists that does not require
+the <<gremlin-console,Gremlin Console>> -- an interactive programming environment exists that does not require
 code compilation. For learning TinkerPop3 and interacting with a live graph system in an ad hoc manner, the Gremlin
 Console is invaluable. However, for developers interested in working with Gremlin-Java, a few Groovy-to-Java patterns
 are presented below.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9050ad1b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index b60dc65..d77cde1 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -111,12 +111,12 @@ class Path(object):
                 if key in labels:
                     objects.append(self.objects[i])
             if 0 == len(objects):
-                raise Error("The step with label " + key + " does not exist")
+                raise KeyError("The step with label " + key + " does not exist")
             return objects if len(objects) > 1 else objects[0]
         elif isinstance(key, int):
             return self.objects[key]
         else:
-            raise Error("The step with label " + key + " does not exist")
+            raise TypeError("The path access key must be either a string label or integer index")
 
     def __len__(self):
         return len(self.objects)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9050ad1b/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 bb0d284..72b4b79 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -80,12 +80,29 @@ class TestGraph(TestCase):
         assert path[1] == Vertex(1)
         assert path[2] == "hello"
         assert 3 == len(path)
+        assert "hello" in path
+        assert "goodbye" not in path
+        assert Vertex(1) in path
+        assert Vertex(123) not in path
+        #
         try:
             temp = path[3]
-            raise Exception("Accessing beyond the list index should throw an error")
+            raise Exception("Accessing beyond the list index should throw an index error")
         except IndexError:
             pass
         #
+        try:
+            temp = path["zz"]
+            raise Exception("Accessing nothing should throw a key error")
+        except KeyError:
+            pass
+        #
+        try:
+            temp = path[1:2]
+            raise Exception("Accessing using slices should throw a type error")
+        except TypeError:
+            pass
+        #
         assert path == path
         assert hash(path) == hash(path)
         path2 = Path([set(["a", "b"]), set(["c", "b"]), set([])], [1, Vertex(1), "hello"])


[08/37] tinkerpop git commit: Prepare changelog for 3.1.5

Posted by dk...@apache.org.
Prepare changelog for 3.1.5


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

Branch: refs/heads/TINKERPOP-1280
Commit: 19873b5d3992c1db45e5c1f26d2c03787734036e
Parents: 1e3c950
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 06:39:16 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 06:39:16 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/19873b5d/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4f6f1b1..cf44d2f 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -22,9 +22,15 @@ TinkerPop 3.1.0 (A 187 On The Undercover Gremlinz)
 
 image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-gangster.png[width=185]
 
+[[release-3-1-5]]
+TinkerPop 3.1.5 (NOT OFFICIALLY RELEASED YET)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
 [[release-3-1-4]]
 TinkerPop 3.1.4 (Release Date: September 6, 2016)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 * Improved the error provided by a client-side session if no hosts were available.
 * Fixed a bug in `PropertiesTest` which assumed long id values.


[28/37] tinkerpop git commit: Merge branch 'TINKERPOP-1440'

Posted by dk...@apache.org.
Merge branch 'TINKERPOP-1440'


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

Branch: refs/heads/TINKERPOP-1280
Commit: d659e15beb7366bf8ca555e0e4e4ab6f88b9dbeb
Parents: a879702 9050ad1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Sep 13 09:03:50 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 13 09:03:50 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 docs/src/reference/gremlin-variants.asciidoc    | 12 +++---
 docs/src/reference/intro.asciidoc               | 14 +++----
 .../jython/gremlin_python/structure/graph.py    | 32 ++++++++++++++
 .../gremlin_python/structure/io/graphson.py     | 16 ++++++-
 .../jython/tests/structure/io/test_graphson.py  | 13 ++++++
 .../main/jython/tests/structure/test_graph.py   | 44 +++++++++++++++++++-
 7 files changed, 117 insertions(+), 15 deletions(-)
----------------------------------------------------------------------



[20/37] tinkerpop git commit: Made sure the GraphSON message serializers use extended graphson

Posted by dk...@apache.org.
Made sure the GraphSON message serializers use extended graphson

This should have made it into 3.2.2, but didn't - bad oversight. CTR


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

Branch: refs/heads/TINKERPOP-1280
Commit: 0e4e8a1b20bae7354ec74c4145d9d3550be8fafd
Parents: 2c57331
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Sep 12 14:41:10 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Sep 12 14:41:10 2016 -0400

----------------------------------------------------------------------
 .../GraphSONMessageSerializerGremlinV2d0.java   |  4 +-
 .../ser/GraphSONMessageSerializerV2d0.java      |  4 +-
 .../server/GremlinDriverIntegrateTest.java      | 39 +++++++++++++++++++-
 3 files changed, 44 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0e4e8a1b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
index a2d29fc..be1a26f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
@@ -20,12 +20,13 @@ package org.apache.tinkerpop.gremlin.driver.ser;
 
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
 
 import java.nio.ByteBuffer;
 
 /**
- * Serialize results to JSON with version 2.0.x schema.
+ * Serialize results to JSON with version 2.0.x schema and the extended module.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -63,6 +64,7 @@ public final class GraphSONMessageSerializerGremlinV2d0 extends AbstractGraphSON
     @Override
     GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
         return builder.version(GraphSONVersion.V2_0)
+                .addCustomModule(GraphSONXModuleV2d0.build().create(false))
                 .addCustomModule(new GremlinServerModule())
                 .typeInfo(TypeInfo.PARTIAL_TYPES);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0e4e8a1b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
index 2e8c96e..4386b5a 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
@@ -23,6 +23,7 @@ import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,7 +33,7 @@ import java.util.Map;
 import java.util.UUID;
 
 /**
- * Serialize results to JSON with version 2.0.x schema.
+ * Serialize results to JSON with version 2.0.x schema and the extended module.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -65,6 +66,7 @@ public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessage
     @Override
     GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
         return builder.version(GraphSONVersion.V2_0)
+                .addCustomModule(GraphSONXModuleV2d0.build().create(false))
                 .addCustomModule(new GremlinServerModule())
                 .typeInfo(TypeInfo.PARTIAL_TYPES);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0e4e8a1b/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 4f255b9..d7f7896 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
@@ -33,16 +33,19 @@ import org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0;
 import org.apache.tinkerpop.gremlin.driver.ser.Serializers;
 import org.apache.tinkerpop.gremlin.server.channel.NioChannelizer;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
 import org.apache.tinkerpop.gremlin.util.TimeUtil;
 import groovy.json.JsonBuilder;
 import org.apache.tinkerpop.gremlin.util.function.FunctionUtils;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.hamcrest.core.IsInstanceOf;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -607,7 +610,7 @@ public class GremlinDriverIntegrateTest extends AbstractGremlinServerIntegration
     }
 
     @Test
-    public void shouldWorkWithGraphSONSerialization() throws Exception {
+    public void shouldWorkWithGraphSONV1Serialization() throws Exception {
         final Cluster cluster = Cluster.build("localhost").serializer(Serializers.GRAPHSON_V1D0).create();
         final Client client = cluster.connect();
 
@@ -643,6 +646,40 @@ public class GremlinDriverIntegrateTest extends AbstractGremlinServerIntegration
     }
 
     @Test
+    public void shouldWorkWithGraphSONV2Serialization() throws Exception {
+        final Cluster cluster = Cluster.build("localhost").serializer(Serializers.GRAPHSON_V2D0).create();
+        final Client client = cluster.connect();
+
+        final List<Result> r = client.submit("TinkerFactory.createModern().traversal().V(1)").all().join();
+        assertEquals(1, r.size());
+
+        final Vertex v = r.get(0).get(DetachedVertex.class);
+        assertEquals(1, v.id());
+        assertEquals("person", v.label());
+
+        assertEquals(2, IteratorUtils.count(v.properties()));
+        assertEquals("marko", v.value("name"));
+        assertEquals(29, Integer.parseInt(v.value("age").toString()));
+
+        cluster.close();
+    }
+
+    @Test
+    public void shouldWorkWithGraphSONExtendedV2Serialization() throws Exception {
+        final Cluster cluster = Cluster.build("localhost").serializer(Serializers.GRAPHSON_V2D0).create();
+        final Client client = cluster.connect();
+
+        final Instant now = Instant.now();
+        final List<Result> r = client.submit("java.time.Instant.ofEpochMilli(" + now.toEpochMilli() + ")").all().join();
+        assertEquals(1, r.size());
+
+        final Instant then = r.get(0).get(Instant.class);
+        assertEquals(now, then);
+
+        cluster.close();
+    }
+
+    @Test
     @org.junit.Ignore("Can't seem to make this test pass consistently")
     public void shouldHandleRequestSentThatNeverReturns() throws Exception {
         final Cluster cluster = Cluster.open();


[25/37] tinkerpop git commit: Added note on Grape configuration for Gremlin-Neo4j dependency resolution

Posted by dk...@apache.org.
Added note on Grape configuration for Gremlin-Neo4j dependency resolution


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

Branch: refs/heads/TINKERPOP-1280
Commit: e81f7721a29e8c2891924289463e7e942420627a
Parents: 0b11fb1
Author: Gabor Szarnyas <sz...@gmail.com>
Authored: Tue Sep 13 14:59:48 2016 +0200
Committer: Gabor Szarnyas <sz...@gmail.com>
Committed: Tue Sep 13 15:41:20 2016 +0200

----------------------------------------------------------------------
 docs/src/reference/implementations-neo4j.asciidoc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e81f7721/docs/src/reference/implementations-neo4j.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-neo4j.asciidoc b/docs/src/reference/implementations-neo4j.asciidoc
index 8c63925..902295f 100644
--- a/docs/src/reference/implementations-neo4j.asciidoc
+++ b/docs/src/reference/implementations-neo4j.asciidoc
@@ -42,6 +42,8 @@ because it only references the Apache2-licensed Neo4j API (not its implementatio
 binaries. To access the binaries, use the `:install` command to download binaries from
 link:http://search.maven.org/[Maven Central Repository].
 
+TIP: For configuring Grape, the dependency resolver of Groovy, please refer to the <<gremlin-applications,Gremlin Applications>> section.
+
 [source,groovy]
 ----
 gremlin> :install org.apache.tinkerpop neo4j-gremlin x.y.z
@@ -329,4 +331,3 @@ a cluster handled by two Gremlin Servers or Neo4j Enterprise. The only limits as
 utilized are prescribed by Neo4j itself. Please refer to their
 link:http://neo4j.com/docs/operations-manual/current/#ha-setup-tutorial[documentation] for more information on how
 this feature works.
-


[36/37] 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 dk...@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-1280
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(-)
----------------------------------------------------------------------



[35/37] 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 dk...@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
+			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
+			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>

[37/37] tinkerpop git commit: Allow VertexPrograms to declare their traverser requirements.

Posted by dk...@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-1280
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")) ?