#!/usr/bin/perl -w use strict; use Date::Calc qw/Decode_Date_US Date_to_Days Add_Delta_Days Today Time_to_Date Date_to_Text/; sub find_match($$); my $search_string = shift or die "usage: $0 "; my $repository = 'cvs-test'; my $date1 = '01/01/2000'; my $day_low = Date_to_Days(Decode_Date_US($date1)); my $day_hi = Date_to_Days(Today); do { my $day_mid = int(($day_low+$day_hi+1)/2); my $match = find_match ($day_mid, $search_string); if ($match) { $day_hi = $day_mid-1; } else { $day_low = $day_mid; } } until ($day_low == $day_hi); my $hit_date = $day_low-1; # run find_match again to checkout correct version. find_match($hit_date, $search_string); print join('/',Add_Delta_Days(1, 1, 1, $hit_date)),"\n"; exit 0; sub find_match($$) { my ($d, $search_string) = @_; my $dt = join('-',Add_Delta_Days(1, 1, 1, $d-1)); print "try $dt\n"; chomp (my $cwd = `pwd`); system ('rm -rf t-src') if -d 't-src'; !system ("cvs -Q co -d t-src -D$dt $repository") || die "cvs co -D$dt $repository"; return 0 unless -d 't-src'; return !system ("grep -rsqe '$search_string' t-src"); }