Merge "ATest: Won't symlink LATEST for non-test options."
diff --git a/atest/atest.py b/atest/atest.py
index 8611e21..c4b993e 100755
--- a/atest/atest.py
+++ b/atest/atest.py
@@ -563,17 +563,17 @@
 # pylint: disable=too-many-statements
 # pylint: disable=too-many-branches
 # pylint: disable=too-many-return-statements
-def main(argv, results_dir):
+def main(argv, results_dir, args):
     """Entry point of atest script.
 
     Args:
         argv: A list of arguments.
         results_dir: A directory which stores the ATest execution information.
+        args: An argspace.Namespace class instance holding parsed args.
 
     Returns:
         Exit code.
     """
-    args = _parse_args(argv)
     _configure_logging(args.verbose)
     _validate_args(args)
     metrics_utils.get_start_time()
@@ -707,14 +707,16 @@
 
 if __name__ == '__main__':
     RESULTS_DIR = make_test_run_dir()
+    ARGS = _parse_args(sys.argv[1:])
     with atest_execution_info.AtestExecutionInfo(sys.argv[1:],
-                                                 RESULTS_DIR) as result_file:
+                                                 RESULTS_DIR,
+                                                 ARGS) as result_file:
         metrics_base.MetricsBase.tool_name = constants.TOOL_NAME
-        EXIT_CODE = main(sys.argv[1:], RESULTS_DIR)
+        EXIT_CODE = main(sys.argv[1:], RESULTS_DIR, ARGS)
         DETECTOR = bug_detector.BugDetector(sys.argv[1:], EXIT_CODE)
         metrics.LocalDetectEvent(
             detect_type=constants.DETECT_TYPE_BUG_DETECTED,
             result=DETECTOR.caught_result)
         if result_file:
-            print('Execution detail has saved in %s' % result_file.name)
+            print("Run 'atest --history' to review test result history.")
     sys.exit(EXIT_CODE)
diff --git a/atest/atest_execution_info.py b/atest/atest_execution_info.py
index a92fe1f..39cd3c1 100644
--- a/atest/atest_execution_info.py
+++ b/atest/atest_execution_info.py
@@ -100,6 +100,25 @@
                 pass
 
 
+def has_non_test_options(args):
+    """
+    check whether non-test option in the args.
+
+    Args:
+        args: An argspace.Namespace class instance holding parsed args.
+
+    Returns:
+        True, if args has at least one non-test option.
+        False, otherwise.
+    """
+    return (args.collect_tests_only
+            or args.dry_run
+            or args.help
+            or args.history
+            or args.info
+            or args.version)
+
+
 class AtestExecutionInfo(object):
     """Class that stores the whole test progress information in JSON format.
 
@@ -139,12 +158,13 @@
 
     result_reporters = []
 
-    def __init__(self, args, work_dir):
+    def __init__(self, args, work_dir, args_ns):
         """Initialise an AtestExecutionInfo instance.
 
         Args:
             args: Command line parameters.
-            work_dir : The directory for saving information.
+            work_dir: The directory for saving information.
+            args_ns: An argspace.Namespace class instance holding parsed args.
 
         Returns:
                A json format string.
@@ -152,6 +172,7 @@
         self.args = args
         self.work_dir = work_dir
         self.result_file = None
+        self.args_ns = args_ns
 
     def __enter__(self):
         """Create and return information file object."""
@@ -168,7 +189,8 @@
             self.result_file.write(AtestExecutionInfo.
                                    _generate_execution_detail(self.args))
             self.result_file.close()
-            symlink_latest_result(self.work_dir)
+            if not has_non_test_options(self.args_ns):
+                symlink_latest_result(self.work_dir)
         main_module = sys.modules.get(_MAIN_MODULE_KEY)
         main_exit_code = getattr(main_module, _EXIT_CODE_ATTR,
                                  constants.EXIT_CODE_ERROR)