{"action":"created","comment":{"url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/comments/244346391","pull_request_review_id":188313927,"id":244346391,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NDM0NjM5MQ==","diff_hunk":"@@ -85,19 +101,52 @@ private StopPattern (int size) {\n         stops     = new Stop[size];\n         pickups   = new int[size];\n         dropoffs  = new int[size];\n+        continuousPickup = new int[size];","path":"src/main/java/org/opentripplanner/model/StopPattern.java","position":null,"original_position":53,"commit_id":"f46c32668ccada1ecef6eaf4f4df37d87279f7e9","original_commit_id":"0f2b097a26a307b5179e7e8c18be7b59560b3e05","user":{"login":"sdjacobs","id":5751667,"node_id":"MDQ6VXNlcjU3NTE2Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/5751667?v=4","gravatar_id":"","url":"https://api.github.com/users/sdjacobs","html_url":"https://github.com/sdjacobs","followers_url":"https://api.github.com/users/sdjacobs/followers","following_url":"https://api.github.com/users/sdjacobs/following{/other_user}","gists_url":"https://api.github.com/users/sdjacobs/gists{/gist_id}","starred_url":"https://api.github.com/users/sdjacobs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sdjacobs/subscriptions","organizations_url":"https://api.github.com/users/sdjacobs/orgs","repos_url":"https://api.github.com/users/sdjacobs/repos","events_url":"https://api.github.com/users/sdjacobs/events{/privacy}","received_events_url":"https://api.github.com/users/sdjacobs/received_events","type":"User","site_admin":false},"body":"Now that I think about this more, it's probably pretty unlikely that Deduplicator would give you memory savings for StopPattern - you'd expect distinct StopPatterns to have different stop timings, otherwise OTP would just use the same StopPattern objects. That said, this is a harmless, if marginal, optimization.","created_at":"2018-12-28T15:35:57Z","updated_at":"2018-12-28T15:35:57Z","html_url":"https://github.com/opentripplanner/OpenTripPlanner/pull/2603#discussion_r244346391","pull_request_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/comments/244346391"},"html":{"href":"https://github.com/opentripplanner/OpenTripPlanner/pull/2603#discussion_r244346391"},"pull_request":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603"}},"in_reply_to_id":241670584},"pull_request":{"url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603","id":202352866,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAyMzUyODY2","html_url":"https://github.com/opentripplanner/OpenTripPlanner/pull/2603","diff_url":"https://github.com/opentripplanner/OpenTripPlanner/pull/2603.diff","patch_url":"https://github.com/opentripplanner/OpenTripPlanner/pull/2603.patch","issue_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues/2603","number":2603,"state":"open","locked":false,"title":"GTFS flex support: flag stops, deviated-route service, call-and-ride","user":{"login":"sdjacobs","id":5751667,"node_id":"MDQ6VXNlcjU3NTE2Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/5751667?v=4","gravatar_id":"","url":"https://api.github.com/users/sdjacobs","html_url":"https://github.com/sdjacobs","followers_url":"https://api.github.com/users/sdjacobs/followers","following_url":"https://api.github.com/users/sdjacobs/following{/other_user}","gists_url":"https://api.github.com/users/sdjacobs/gists{/gist_id}","starred_url":"https://api.github.com/users/sdjacobs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sdjacobs/subscriptions","organizations_url":"https://api.github.com/users/sdjacobs/orgs","repos_url":"https://api.github.com/users/sdjacobs/repos","events_url":"https://api.github.com/users/sdjacobs/events{/privacy}","received_events_url":"https://api.github.com/users/sdjacobs/received_events","type":"User","site_admin":false},"body":"As part of the US DOT's [Mobility on Demand Sandbox Grant](https://www.transit.dot.gov/research-innovation/fiscal-year-2016-mobility-demand-mod-sandbox-program-projects), we added support for flexible transit to OpenTripPlanner, based on the emerging GTFS-flex spec. This work was done on behalf of VTrans, the Vermont Department of Transportation.\r\n\r\nIt includes:\r\n- flag stops, in which a passenger can flag down the bus along its route or get dropped off in between stops\r\n- deviated-route service, in which the bus can deviate from its route within an area or radius to do a dropoff or pickup\r\n- call-and-ride, which is an entirely deviated segment.\r\n\r\nThe GTFS flex specification is available [here](http://gtfsflex.com/).\r\n\r\nThe overall implementation is to run a \"graph modifier\" before the main graph search which does some preliminary graph searches around the origin and destination in order to create temporary edges and vertices to represent the flex options, which are disposed of after the request.\r\n\r\nThe VTrans project required a few other changes to be made to OTP which are not included in this PR:\r\n- #2593, allowing itineraries to be sorted by duration\r\n- #2592, including more service days in the transit search. (Many of the rural services in Vermont are extremely rare, e.g. a frequency of every other Wednesday, and we wanted those services to be easily discoverable by users.)\r\n\r\nThis is currently usable via VTrans's website here: https://plan.govermont.org/","created_at":"2018-07-18T19:16:16Z","updated_at":"2018-12-28T15:35:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4fad5a1e1177153157d9dfb511ce6551780dd02f","assignee":{"login":"sdjacobs","id":5751667,"node_id":"MDQ6VXNlcjU3NTE2Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/5751667?v=4","gravatar_id":"","url":"https://api.github.com/users/sdjacobs","html_url":"https://github.com/sdjacobs","followers_url":"https://api.github.com/users/sdjacobs/followers","following_url":"https://api.github.com/users/sdjacobs/following{/other_user}","gists_url":"https://api.github.com/users/sdjacobs/gists{/gist_id}","starred_url":"https://api.github.com/users/sdjacobs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sdjacobs/subscriptions","organizations_url":"https://api.github.com/users/sdjacobs/orgs","repos_url":"https://api.github.com/users/sdjacobs/repos","events_url":"https://api.github.com/users/sdjacobs/events{/privacy}","received_events_url":"https://api.github.com/users/sdjacobs/received_events","type":"User","site_admin":false},"assignees":[{"login":"sdjacobs","id":5751667,"node_id":"MDQ6VXNlcjU3NTE2Njc=","avatar_url":"https://avatars2.githubusercontent.com/u/5751667?v=4","gravatar_id":"","url":"https://api.github.com/users/sdjacobs","html_url":"https://github.com/sdjacobs","followers_url":"https://api.github.com/users/sdjacobs/followers","following_url":"https://api.github.com/users/sdjacobs/following{/other_user}","gists_url":"https://api.github.com/users/sdjacobs/gists{/gist_id}","starred_url":"https://api.github.com/users/sdjacobs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sdjacobs/subscriptions","organizations_url":"https://api.github.com/users/sdjacobs/orgs","repos_url":"https://api.github.com/users/sdjacobs/repos","events_url":"https://api.github.com/users/sdjacobs/events{/privacy}","received_events_url":"https://api.github.com/users/sdjacobs/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603/commits","review_comments_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603/comments","review_comment_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/comments{/number}","comments_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues/2603/comments","statuses_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/statuses/f46c32668ccada1ecef6eaf4f4df37d87279f7e9","head":{"label":"camsys:vtrans-gtfs-flex","ref":"vtrans-gtfs-flex","sha":"f46c32668ccada1ecef6eaf4f4df37d87279f7e9","user":{"login":"camsys","id":999576,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5OTU3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/999576?v=4","gravatar_id":"","url":"https://api.github.com/users/camsys","html_url":"https://github.com/camsys","followers_url":"https://api.github.com/users/camsys/followers","following_url":"https://api.github.com/users/camsys/following{/other_user}","gists_url":"https://api.github.com/users/camsys/gists{/gist_id}","starred_url":"https://api.github.com/users/camsys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/camsys/subscriptions","organizations_url":"https://api.github.com/users/camsys/orgs","repos_url":"https://api.github.com/users/camsys/repos","events_url":"https://api.github.com/users/camsys/events{/privacy}","received_events_url":"https://api.github.com/users/camsys/received_events","type":"Organization","site_admin":false},"repo":{"id":10086688,"node_id":"MDEwOlJlcG9zaXRvcnkxMDA4NjY4OA==","name":"OpenTripPlanner","full_name":"camsys/OpenTripPlanner","private":false,"owner":{"login":"camsys","id":999576,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5OTU3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/999576?v=4","gravatar_id":"","url":"https://api.github.com/users/camsys","html_url":"https://github.com/camsys","followers_url":"https://api.github.com/users/camsys/followers","following_url":"https://api.github.com/users/camsys/following{/other_user}","gists_url":"https://api.github.com/users/camsys/gists{/gist_id}","starred_url":"https://api.github.com/users/camsys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/camsys/subscriptions","organizations_url":"https://api.github.com/users/camsys/orgs","repos_url":"https://api.github.com/users/camsys/repos","events_url":"https://api.github.com/users/camsys/events{/privacy}","received_events_url":"https://api.github.com/users/camsys/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/camsys/OpenTripPlanner","description":"An open source multi-modal trip planner","fork":true,"url":"https://api.github.com/repos/camsys/OpenTripPlanner","forks_url":"https://api.github.com/repos/camsys/OpenTripPlanner/forks","keys_url":"https://api.github.com/repos/camsys/OpenTripPlanner/keys{/key_id}","collaborators_url":"https://api.github.com/repos/camsys/OpenTripPlanner/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/camsys/OpenTripPlanner/teams","hooks_url":"https://api.github.com/repos/camsys/OpenTripPlanner/hooks","issue_events_url":"https://api.github.com/repos/camsys/OpenTripPlanner/issues/events{/number}","events_url":"https://api.github.com/repos/camsys/OpenTripPlanner/events","assignees_url":"https://api.github.com/repos/camsys/OpenTripPlanner/assignees{/user}","branches_url":"https://api.github.com/repos/camsys/OpenTripPlanner/branches{/branch}","tags_url":"https://api.github.com/repos/camsys/OpenTripPlanner/tags","blobs_url":"https://api.github.com/repos/camsys/OpenTripPlanner/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/camsys/OpenTripPlanner/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/camsys/OpenTripPlanner/git/refs{/sha}","trees_url":"https://api.github.com/repos/camsys/OpenTripPlanner/git/trees{/sha}","statuses_url":"https://api.github.com/repos/camsys/OpenTripPlanner/statuses/{sha}","languages_url":"https://api.github.com/repos/camsys/OpenTripPlanner/languages","stargazers_url":"https://api.github.com/repos/camsys/OpenTripPlanner/stargazers","contributors_url":"https://api.github.com/repos/camsys/OpenTripPlanner/contributors","subscribers_url":"https://api.github.com/repos/camsys/OpenTripPlanner/subscribers","subscription_url":"https://api.github.com/repos/camsys/OpenTripPlanner/subscription","commits_url":"https://api.github.com/repos/camsys/OpenTripPlanner/commits{/sha}","git_commits_url":"https://api.github.com/repos/camsys/OpenTripPlanner/git/commits{/sha}","comments_url":"https://api.github.com/repos/camsys/OpenTripPlanner/comments{/number}","issue_comment_url":"https://api.github.com/repos/camsys/OpenTripPlanner/issues/comments{/number}","contents_url":"https://api.github.com/repos/camsys/OpenTripPlanner/contents/{+path}","compare_url":"https://api.github.com/repos/camsys/OpenTripPlanner/compare/{base}...{head}","merges_url":"https://api.github.com/repos/camsys/OpenTripPlanner/merges","archive_url":"https://api.github.com/repos/camsys/OpenTripPlanner/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/camsys/OpenTripPlanner/downloads","issues_url":"https://api.github.com/repos/camsys/OpenTripPlanner/issues{/number}","pulls_url":"https://api.github.com/repos/camsys/OpenTripPlanner/pulls{/number}","milestones_url":"https://api.github.com/repos/camsys/OpenTripPlanner/milestones{/number}","notifications_url":"https://api.github.com/repos/camsys/OpenTripPlanner/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/camsys/OpenTripPlanner/labels{/name}","releases_url":"https://api.github.com/repos/camsys/OpenTripPlanner/releases{/id}","deployments_url":"https://api.github.com/repos/camsys/OpenTripPlanner/deployments","created_at":"2013-05-15T19:51:18Z","updated_at":"2018-10-17T13:13:05Z","pushed_at":"2018-12-28T15:32:35Z","git_url":"git://github.com/camsys/OpenTripPlanner.git","ssh_url":"git@github.com:camsys/OpenTripPlanner.git","clone_url":"https://github.com/camsys/OpenTripPlanner.git","svn_url":"https://github.com/camsys/OpenTripPlanner","homepage":"http://www.opentripplanner.org","size":143264,"stargazers_count":4,"watchers_count":4,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":1,"open_issues":0,"watchers":4,"default_branch":"master"}},"base":{"label":"opentripplanner:master","ref":"master","sha":"289dac325fa9a7dc8060a76b406076f9c6a92888","user":{"login":"opentripplanner","id":3007066,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwMDcwNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3007066?v=4","gravatar_id":"","url":"https://api.github.com/users/opentripplanner","html_url":"https://github.com/opentripplanner","followers_url":"https://api.github.com/users/opentripplanner/followers","following_url":"https://api.github.com/users/opentripplanner/following{/other_user}","gists_url":"https://api.github.com/users/opentripplanner/gists{/gist_id}","starred_url":"https://api.github.com/users/opentripplanner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/opentripplanner/subscriptions","organizations_url":"https://api.github.com/users/opentripplanner/orgs","repos_url":"https://api.github.com/users/opentripplanner/repos","events_url":"https://api.github.com/users/opentripplanner/events{/privacy}","received_events_url":"https://api.github.com/users/opentripplanner/received_events","type":"Organization","site_admin":false},"repo":{"id":2067253,"node_id":"MDEwOlJlcG9zaXRvcnkyMDY3MjUz","name":"OpenTripPlanner","full_name":"opentripplanner/OpenTripPlanner","private":false,"owner":{"login":"opentripplanner","id":3007066,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwMDcwNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3007066?v=4","gravatar_id":"","url":"https://api.github.com/users/opentripplanner","html_url":"https://github.com/opentripplanner","followers_url":"https://api.github.com/users/opentripplanner/followers","following_url":"https://api.github.com/users/opentripplanner/following{/other_user}","gists_url":"https://api.github.com/users/opentripplanner/gists{/gist_id}","starred_url":"https://api.github.com/users/opentripplanner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/opentripplanner/subscriptions","organizations_url":"https://api.github.com/users/opentripplanner/orgs","repos_url":"https://api.github.com/users/opentripplanner/repos","events_url":"https://api.github.com/users/opentripplanner/events{/privacy}","received_events_url":"https://api.github.com/users/opentripplanner/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/opentripplanner/OpenTripPlanner","description":"An open source multi-modal trip planner","fork":false,"url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner","forks_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/forks","keys_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/keys{/key_id}","collaborators_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/teams","hooks_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/hooks","issue_events_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues/events{/number}","events_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/events","assignees_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/assignees{/user}","branches_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/branches{/branch}","tags_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/tags","blobs_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/git/refs{/sha}","trees_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/git/trees{/sha}","statuses_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/statuses/{sha}","languages_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/languages","stargazers_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/stargazers","contributors_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/contributors","subscribers_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/subscribers","subscription_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/subscription","commits_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/commits{/sha}","git_commits_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/git/commits{/sha}","comments_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/comments{/number}","issue_comment_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues/comments{/number}","contents_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/contents/{+path}","compare_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/compare/{base}...{head}","merges_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/merges","archive_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/downloads","issues_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues{/number}","pulls_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls{/number}","milestones_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/milestones{/number}","notifications_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/labels{/name}","releases_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/releases{/id}","deployments_url":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/deployments","created_at":"2011-07-18T16:15:38Z","updated_at":"2018-12-27T00:26:24Z","pushed_at":"2018-12-28T15:32:37Z","git_url":"git://github.com/opentripplanner/OpenTripPlanner.git","ssh_url":"git@github.com:opentripplanner/OpenTripPlanner.git","clone_url":"https://github.com/opentripplanner/OpenTripPlanner.git","svn_url":"https://github.com/opentripplanner/OpenTripPlanner","homepage":"http://www.opentripplanner.org","size":112569,"stargazers_count":1215,"watchers_count":1215,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":697,"mirror_url":null,"archived":false,"open_issues_count":813,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":697,"open_issues":813,"watchers":1215,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603"},"html":{"href":"https://github.com/opentripplanner/OpenTripPlanner/pull/2603"},"issue":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues/2603"},"comments":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/issues/2603/comments"},"review_comments":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603/comments"},"review_comment":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/pulls/2603/commits"},"statuses":{"href":"https://api.github.com/repos/opentripplanner/OpenTripPlanner/statuses/f46c32668ccada1ecef6eaf4f4df37d87279f7e9"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"sdjacobs"}}