Index: /tags/ipp-20101029/ippScripts/scripts/automate_stacks.pl
===================================================================
--- /tags/ipp-20101029/ippScripts/scripts/automate_stacks.pl	(revision 29658)
+++ /tags/ipp-20101029/ippScripts/scripts/automate_stacks.pl	(revision 29659)
@@ -1267,5 +1267,9 @@
     my $stack_done_sth = "SELECT * from stackRun LEFT JOIN stackSumSkyfile USING(stack_id) WHERE $where ";
     $stack_done_sth .= " AND ((state = 'full') OR (state = 'new' && fault != 0)) ";
-
+    if ($debug == 1) {
+	print STDERR "post_stack_queue: database queries:\n";
+	print STDERR "$stack_full_sth\n";
+	print STDERR "$stack_done_sth\n";
+    }
     my $stack_full_ref = $db->selectall_arrayref( $stack_full_sth );
     my $stack_done_ref = $db->selectall_arrayref( $stack_done_sth );
@@ -1281,12 +1285,20 @@
         if ($stackable_list{$target} == 1) {
 	    my ($Nstacks, $Nattempted) = post_stack_queue($date,$target);
+	    if ($debug == 1) {
+		print STDERR "confirm_stacks: Target $target on $date has $Nattempted attempts on $Nstacks.\n";
+	    }
 	    if ($Nstacks != $Nattempted) {
 		if ($debug == 1) {
-		    print STDERR "confirm_stacks: Target $target on $date is not done stacking. $Nstacks $Nattempted\n"
+		    print STDERR "confirm_stacks: Target $target on $date is not done stacking. $Nstacks $Nattempted\n";
 		}
 		if ($metadata_out{nsState} eq 'CONFIRM_STACKING') {
 		    $metadata_out{nsState} = 'STACKING';
 		}
-		    
+		next;
+	    }
+	    if ($Nstacks == 0) {
+		if ($debug == 1) {
+		    print STDERR "confirm_stacks: Target $target on $date has no stacks. Skipping.\n";
+		}
 		next;
 	    }
@@ -1307,4 +1319,20 @@
 ################################################################################
 
+sub verify_uniqueness_diff {
+    my $warp_id_1 = shift;
+    my $warp_id_2 = shift;
+    my $date = shift;
+    my $target = shift;
+
+    my $db = init_gpc_db();
+    $date =~ s/-//g;
+    my ($label,$workdir,$obs_mode,$object,$comment,$tess_id,$dist_group,$data_group,$reduction) = get_tool_parameters($date,$target);
+
+    my $sth = "SELECT diff_id from diffRun JOIN diffInputSkyfile USING(diff_id) where data_group = '$data_group' AND warp1 = $warp_id_1 AND warp2 = $warp_id_2";
+    my $data_ref = $db->selectall_arrayref( $sth );
+
+    return($#{ $data_ref } + 1);
+}
+
 sub do_extra_processing {
     my $date = shift;
@@ -1332,5 +1360,5 @@
 	    if (($#{ $warps } + 1) % 2 != 0) {
 		print STDERR "Number of input warps to make OSS diffs is not even! $#{ $warps }\n";
-		die;
+		last;
 	    }
 	    
@@ -1341,4 +1369,12 @@
 		my $template_exp_id = ${ $template_warp }[0];
 		
+		my $input_warp_id = ${ $input_warp }[1];
+		my $template_warp_id = ${ $template_warp }[1];
+
+		if (verify_uniqueness_diff($input_warp_id,$template_warp_id,$date,$target) != 0) {
+		    print STDERR "Diffs already queued for this $date $target $input_exp_id $template_exp_id\n";
+		    next;
+		}
+
 		my $cmd = "$difftool -dbname $dbname  -definewarpwarp ";
 		$cmd .= "-input_label $label  -template_label $label ";
@@ -1507,5 +1543,7 @@
 	my $N = $metadata_out{N_MACROS};
 	$metadata_out{"ns${N}Macro"} = $macro_formats{$proc_mode};
-#	print STDERR "WORKING ON A MACRO: ns${N}Macro $proc_mode $macro_formats{$proc_mode}\n";
+	if ($debug == 1) {
+	    print STDERR "WORKING ON A MACRO: ns${N}Macro $proc_mode $macro_formats{$proc_mode}\n";
+	}
 	if (defined($date)&&(defined($target))) {
 
@@ -1528,4 +1566,7 @@
 	    $metadata_out{"ns${N}Macro"} =~ s/\@DATE\@/$date/;
 	}
+	if ($debug == 1) {
+	    print STDERR "DONE WITH A MACRO: ns${N}Macro $proc_mode $macro_formats{$proc_mode}\n";
+	}
 	$metadata_out{N_MACROS} ++;
     }
Index: /tags/ipp-20101029/ippTasks/nightly_stacks.pro
===================================================================
--- /tags/ipp-20101029/ippTasks/nightly_stacks.pro	(revision 29658)
+++ /tags/ipp-20101029/ippTasks/nightly_stacks.pro	(revision 29659)
@@ -83,5 +83,5 @@
 macro ns.stacks.on
   task ns.stacks.load
-    active true
+    active false
   end
   task ns.stacks.run
@@ -617,5 +617,5 @@
      option $date
 
-     if ("$ns_STATE" != "QUEUESTACKS") break
+     if (("$ns_STATE" != "QUEUESTACKS")&&("$ns_STATE" != "TOWARP")&&("$ns_STATE" != "FORCETOWARP")) break
      $run = automate_stacks.pl --queue_stacks --date $date
      command $run
