From a4f855c7f7d6fba7b6c249ecb174cb79acd55fad Mon Sep 17 00:00:00 2001
From: Daniel Friesel <derf@finalrewind.org>
Date: Sun, 12 Jan 2014 15:41:33 +0100
Subject: [PATCH] Improve unparsable route data error message, and two-way
 trips to limitations

---
 Changelog                    | 4 ++++
 bin/efa                      | 9 ++++++++-
 lib/Travel/Routing/DE/VRR.pm | 4 ++--
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Changelog b/Changelog
index 2c64fcd..3c8a344 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,7 @@
+git HEAD
+
+    * Improve error message for unparsable (or missing) route data
+
 Travel::Routing::DE::VRR 2.04 - Tue Jan 07 2014
 
     * efa: Handle UTF8 in place/stop input
diff --git a/bin/efa b/bin/efa
index 2eb8624..287ef18 100755
--- a/bin/efa
+++ b/bin/efa
@@ -65,7 +65,7 @@ sub handle_efa_exception {
 		exit 2;
 	}
 	if ( $e->isa('Travel::Routing::DE::VRR::Exception::NoData') ) {
-		printf STDERR ( 'Error: %s', $e->description );
+		printf STDERR ( "Error: %s\n", $e->description );
 		exit 3;
 	}
 	if ( $e->isa('Travel::Routing::DE::VRR::Exception::Ambiguous') ) {
@@ -432,6 +432,13 @@ This script requires perl 5.10 (or higher) with the following modules:
 
 =head1 BUGS AND LIMITATIONS
 
+The EFA backend is not able to calculate "two-way" routes, i.e. from -> via ->
+to routes with from == to. If from and to are the same stop, it doesn't even
+try to calculate a route ("we recommend walking instead"), if they are close to
+each other it may or may not work.  Workaround: Request from -> via using the
+normal four-argument efa invocation, read the time, use efa -t time via via to
+to to request via -> to.
+
 None known.
 
 =head1 AUTHOR
diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/VRR.pm
index 665d5bc..c7193e1 100644
--- a/lib/Travel/Routing/DE/VRR.pm
+++ b/lib/Travel/Routing/DE/VRR.pm
@@ -26,7 +26,7 @@ use Exception::Class (
 	},
 	'Travel::Routing::DE::VRR::Exception::NoData' => {
 		isa         => 'Travel::Routing::DE::VRR::Exception',
-		description => 'got no data to parse',
+		description => 'backend returned no parsable route',
 	},
 	'Travel::Routing::DE::VRR::Exception::Ambiguous' => {
 		isa         => 'Travel::Routing::DE::VRR::Exception',
@@ -590,7 +590,7 @@ sub parse {
 		$self->parse_part($part);
 	}
 
-	if ( @{ $self->{routes} } == 0 ) {
+	if ( not defined $self->{routes} or @{ $self->{routes} } == 0 ) {
 		Travel::Routing::DE::VRR::Exception::NoData->throw();
 	}
 
-- 
GitLab