diff --git a/scripts/code_size_compare.py b/scripts/code_size_compare.py
index 96ebf3d..898aaf9 100755
--- a/scripts/code_size_compare.py
+++ b/scripts/code_size_compare.py
@@ -41,12 +41,10 @@
         """
         self.repo_path = "."
         self.result_dir = os.path.abspath(result_dir)
-        if os.path.exists(self.result_dir) is False:
-            os.makedirs(self.result_dir)
+        os.makedirs(self.result_dir, exist_ok=True)
 
         self.csv_dir = os.path.abspath("code_size_records/")
-        if os.path.exists(self.csv_dir) is False:
-            os.makedirs(self.csv_dir)
+        os.makedirs(self.csv_dir, exist_ok=True)
 
         self.old_rev = old_revision
         self.new_rev = new_revision
@@ -60,20 +58,20 @@
 
     @staticmethod
     def validate_revision(revision):
-        result = subprocess.run(["git", "cat-file", "-e", revision], check=False)
-        return result.returncode
+        result = subprocess.run(["git", "rev-parse", "--verify", revision],
+                                check=False, stdout=subprocess.PIPE)
+        return result
 
     def _create_git_worktree(self, revision):
         """Make a separate worktree for revision.
         Do not modify the current worktree."""
 
-        if revision == "HEAD":
+        if revision == "current":
             print("Using current work directory.")
             git_worktree_path = self.repo_path
         else:
             print("Creating git worktree for", revision)
-            rev_dirname = revision.replace("/", "_")
-            git_worktree_path = os.path.join(self.repo_path, "temp-" + rev_dirname)
+            git_worktree_path = os.path.join(self.repo_path, "temp-" + revision)
             subprocess.check_output(
                 [self.git_command, "worktree", "add", "--detach",
                  git_worktree_path, revision], cwd=self.repo_path,
@@ -93,8 +91,11 @@
     def _gen_code_size_csv(self, revision, git_worktree_path):
         """Generate code size csv file."""
 
-        csv_fname = revision.replace("/", "_") + ".csv"
-        print("Measuring code size for", revision)
+        csv_fname = revision + ".csv"
+        if revision == "current":
+            print("Measuring code size in current work directory.")
+        else:
+            print("Measuring code size for", revision)
         result = subprocess.check_output(
             ["size library/*.o"], cwd=git_worktree_path, shell=True
         )
@@ -118,8 +119,8 @@
         """Generate code size csv file for the specified git revision."""
 
         # Check if the corresponding record exists
-        csv_fname = revision.replace("/", "_") + ".csv"
-        if (revision != "HEAD") and \
+        csv_fname = revision + ".csv"
+        if (revision != "current") and \
            os.path.exists(os.path.join(self.csv_dir, csv_fname)):
             print("Code size csv file for", revision, "already exists.")
         else:
@@ -133,13 +134,11 @@
         old and new. Measured code size results of these two revisions
         must be available."""
 
-        old_file = open(os.path.join(self.csv_dir, \
-                        self.old_rev.replace("/", "_") + ".csv"), "r")
-        new_file = open(os.path.join(self.csv_dir, \
-                        self.new_rev.replace("/", "_") + ".csv"), "r")
-        res_file = open(os.path.join(self.result_dir, \
-                        "compare-" + self.old_rev.replace("/", "_") + "-" \
-                        + self.new_rev.replace("/", "_") + ".csv"), "w")
+        old_file = open(os.path.join(self.csv_dir, self.old_rev + ".csv"), "r")
+        new_file = open(os.path.join(self.csv_dir, self.new_rev + ".csv"), "r")
+        res_file = open(os.path.join(self.result_dir, "compare-" + self.old_rev
+                                     + "-" + self.new_rev + ".csv"), "w")
+
         res_file.write("file_name, this_size, old_size, change, change %\n")
         print("Generating comparision results.")
 
@@ -194,12 +193,13 @@
               default is comparison",
     )
     parser.add_argument(
-        "-o", "--old-rev", type=str, help="old revision for comparison.(prefer commit ID)",
+        "-o", "--old-rev", type=str, help="old revision for comparison.",
         required=True,
     )
     parser.add_argument(
-        "-n", "--new-rev", type=str, default="HEAD",
-        help="new revision for comparison, default is current work directory."
+        "-n", "--new-rev", type=str, default=None,
+        help="new revision for comparison, default is the current work \
+              directory, including uncommited changes."
     )
     comp_args = parser.parse_args()
 
@@ -207,15 +207,18 @@
         print("Error: {} is not a directory".format(comp_args.result_dir))
         parser.exit()
 
-    validate_result = CodeSizeComparison.validate_revision(comp_args.old_rev)
-    if validate_result != 0:
-        sys.exit(validate_result)
-    old_revision = comp_args.old_rev
+    validate_res = CodeSizeComparison.validate_revision(comp_args.old_rev)
+    if validate_res.returncode != 0:
+        sys.exit(validate_res.returncode)
+    old_revision = validate_res.stdout.decode().replace("\n", "")
 
-    validate_result = CodeSizeComparison.validate_revision(comp_args.new_rev)
-    if validate_result != 0:
-        sys.exit(validate_result)
-    new_revision = comp_args.new_rev
+    if comp_args.new_rev is not None:
+        validate_res = CodeSizeComparison.validate_revision(comp_args.new_rev)
+        if validate_res.returncode != 0:
+            sys.exit(validate_res.returncode)
+        new_revision = validate_res.stdout.decode().replace("\n", "")
+    else:
+        new_revision = "current"
 
     result_dir = comp_args.result_dir
     size_compare = CodeSizeComparison(old_revision, new_revision, result_dir)
