Index: applications/shepherd
===================================================================
--- applications/shepherd (revision 599)
+++ applications/shepherd (revision 601)
@@ -2,5 +2,5 @@
 
 my $progname = 'shepherd';
-my $version = '0.4.75';
+my $version = '0.4.76';
 
 # tv_grab_au
@@ -89,4 +89,5 @@
 my $pending_messages = { };
 my $starttime = time;
+my $any_data;
 my %REGIONS = (
     126 => "ACT",		73 => "NSW: Sydney",		184 => "NSW: Newcastle",
@@ -219,9 +220,16 @@
     &grab_data("standard");
     &grab_data("paytv") if (defined $want_paytv_channels);
-    &reconcile_data;
-    &postprocess_data;
-    &output_data;
-    &finalize_stats;
-    &report_stats;
+    $any_data = &reconcile_data;
+    if ($any_data)
+    {
+	&postprocess_data;
+	&output_data;
+	&finalize_stats;
+	&report_stats;
+    }
+    else
+    {
+	&no_data;
+    }
     &write_config_file;
     &stop_tor;
@@ -230,4 +238,6 @@
 &log("Done.\n");
 &close_logfile() unless $opt->{nolog};
+
+exit (!$any_data);
 
 # ---------------------------------------------------------------------------
@@ -672,4 +682,12 @@
     &add_pending_message($progname, "SUCCESS", $sysid, $starttime, (time-$starttime), $region, $components_used);
     $last_successful_run = time;
+}
+
+# If no grabbers returned data, don't report individual component failures but rather
+# an overall Shepherd failure.
+sub no_data
+{
+    $pending_messages = undef;
+    &add_pending_message($progname, 'FAIL', $sysid, $starttime, (time-$starttime), $region, 'no data');
 }
 
@@ -3627,5 +3645,5 @@
     if ($num_grabbers == 0) {
 	&log("ERROR! Nothing to reconcile! No valid grabber data!\n");
-	return;
+	return 0;
     }
 
@@ -3657,4 +3675,5 @@
 	XMLTV::catfiles(\%w_args, @input_file_list);
     }
+    return 1;
 }
 
