Index: appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py |
diff --git a/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py b/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py |
index 44ab22b91bd9d32538ad67e9d59de6b29403fd59..75f5370a7006705c5a4030ae224d5074c7144bdf 100644 |
--- a/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py |
+++ b/appengine/findit/util_scripts/crash_queries/delta_test/run-delta-test.py |
@@ -28,12 +28,22 @@ _A_YEAR_AGO = (date.today() - timedelta(days=365)).strftime('%Y-%m-%d') |
# App Engine APIs will fail if batch size is more than 1000. |
_MAX_BATCH_SIZE = 1000 |
_DEFAULT_BATCH_SIZE = _MAX_BATCH_SIZE |
+_DEFAULT_MAX_N = 100 |
DELTA_RESULTS_DIRECTORY = os.path.join(os.path.dirname(__file__), |
'delta_results') |
CHROMIUM_REPO = 'https://chromium.googlesource.com/chromium/src' |
+def GenerateDeltaResultPath(directory, git_hash1, git_hash2, |
+ since_date, until_date, max_n): |
+ """Returns the file path of delta result.""" |
+ delta_result_prefix = '%s_%s_%s..%s_max_%d.delta' % ( |
+ git_hash1[:7], git_hash2[:7], since_date, until_date, max_n) |
+ |
+ return os.path.join(directory, delta_result_prefix) |
+ |
+ |
def RunDeltaTest(): |
"""Runs delta testing between two different Predator revisions.""" |
argparser = argparse.ArgumentParser( |
@@ -51,7 +61,9 @@ def RunDeltaTest(): |
nargs='+', |
default=['HEAD^', 'HEAD'], |
help=('The Predator revisions to be compared. It can take ' |
- 'one or two revisions seperated by empty spaces.\n' |
+ 'one or two revisions seperated by empty spaces. N.B. The revision ' |
+ 'can be any format that git can recognize, for example, it can be ' |
+ 'either "97312dbc1" or "HEAD~5"\n' |
'(1) -r rev1 rev2: compare rev1 and rev2\n' |
'(2) -r rev: compare rev and current HEAD\n' |
'(3) no revisions provided, default to compare HEAD^ and HEAD')) |
@@ -101,6 +113,13 @@ def RunDeltaTest(): |
'APIs would fail, defaults to 1000.')) |
argparser.add_argument( |
+ '--max', |
+ '-m', |
+ type=int, |
+ default=_DEFAULT_MAX_N, |
+ help='The maximum number of crashes we want to check, defaults to 100.') |
+ |
+ argparser.add_argument( |
'--verbose', |
'-v', |
action='store_true', |
@@ -124,20 +143,18 @@ def RunDeltaTest(): |
'would fail.', _MAX_BATCH_SIZE) |
sys.exit(1) |
+ args.batch = min(args.max, args.batch) |
+ |
# If only one revision provided, default the rev2 to HEAD. |
if len(args.revisions) == 1: |
args.revisions.append('HEAD') |
git_hash1 = delta_util.ParseGitHash(args.revisions[0]) |
git_hash2 = delta_util.ParseGitHash(args.revisions[1]) |
- |
- delta_result_prefix = '%s_%s_%s..%s.delta' % (git_hash1[:7], git_hash2[:7], |
- args.since, args.until) |
- delta_csv_path = os.path.join(DELTA_RESULTS_DIRECTORY, |
- '%s.csv' % delta_result_prefix) |
- delta_path = os.path.join(DELTA_RESULTS_DIRECTORY, |
- delta_result_prefix) |
- |
+ delta_path = GenerateDeltaResultPath(DELTA_RESULTS_DIRECTORY, |
+ git_hash1, git_hash1, |
+ args.since, args.until, args.max) |
+ delta_csv_path = delta_path + '.csv' |
# Check if delta results already existed. |
# TODO: this code has race conditions for interacting with the file system. |
if os.path.exists(delta_csv_path): |
@@ -155,7 +172,7 @@ def RunDeltaTest(): |
# Get delta of results between git_hash1 and git_hash2. |
deltas, crash_num = delta_test.DeltaEvaluator( |
git_hash1, git_hash2, args.client, args.app, |
- start_date=args.since, end_date=args.until, |
+ start_date=args.since, end_date=args.until, max_n=args.max, |
batch_size=args.batch, verbose=args.verbose) |
delta_util.FlushResult([deltas, crash_num], delta_path) |
delta_util.WriteDeltaToCSV(deltas, crash_num, args.app, |