[PATCH] D127099: [Dexter] Use PurePath to compare paths in Dexter commands

Stephen Tozer via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 6 04:02:03 PDT 2022


StephenTozer created this revision.
StephenTozer added reviewers: jmorse, Orlando.
StephenTozer added a project: debug-info.
Herald added a project: All.
StephenTozer requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Prior to this patch, when comparing the paths of source files in Dexter commands, we would use os.samefile. This function performs actual file operations and requires the files to exist on the current system; this is suitable when running the test for the first time, but renders the DextIR output files non-portable, and unusable if the source files no longer exist in their original location.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127099

Files:
  cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexDeclareAddress.py
  cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexExpectWatchBase.py
  cross-project-tests/debuginfo-tests/dexter/dex/dextIR/ProgramState.py


Index: cross-project-tests/debuginfo-tests/dexter/dex/dextIR/ProgramState.py
===================================================================
--- cross-project-tests/debuginfo-tests/dexter/dex/dextIR/ProgramState.py
+++ cross-project-tests/debuginfo-tests/dexter/dex/dextIR/ProgramState.py
@@ -11,6 +11,7 @@
 import os
 
 from collections import OrderedDict
+from pathlib import PurePath
 from typing import List
 
 class SourceLocation:
@@ -31,7 +32,7 @@
         if not other or not isinstance(other, SourceLocation):
             return False
 
-        if self.path and (self.path != other.path):
+        if self.path and (other.path is None or (PurePath(self.path) != PurePath(other.path))):
             return False
 
         if self.lineno and (self.lineno != other.lineno):
Index: cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexExpectWatchBase.py
===================================================================
--- cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexExpectWatchBase.py
+++ cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexExpectWatchBase.py
@@ -14,6 +14,7 @@
 import os
 import math
 from collections import namedtuple
+from pathlib import PurePath
 
 from dex.command.CommandBase import CommandBase, StepExpectInfo
 from dex.command.StepValueInfo import StepValueInfo
@@ -208,12 +209,11 @@
         return differences
 
     def eval(self, step_collection):
-        assert os.path.exists(self.path)
         for step in step_collection.steps:
             loc = step.current_location
 
-            if (loc.path and os.path.exists(loc.path) and
-                os.path.samefile(loc.path, self.path) and
+            if (loc.path and self.path and
+                PurePath(loc.path) == PurePath(self.path) and
                 loc.lineno in self.line_range):
                 try:
                     watch = step.program_state.frames[0].watches[self.expression]
Index: cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexDeclareAddress.py
===================================================================
--- cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexDeclareAddress.py
+++ cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexDeclareAddress.py
@@ -8,6 +8,7 @@
 """
 
 import os
+from pathlib import PurePath
 
 from dex.command.CommandBase import CommandBase, StepExpectInfo
 
@@ -37,13 +38,12 @@
         return self.addr_name
 
     def eval(self, step_collection):
-        assert os.path.exists(self.path)
         self.address_resolutions[self.get_address_name()] = None
         for step in step_collection.steps:
             loc = step.current_location
 
-            if (loc.path and os.path.exists(loc.path) and
-                os.path.samefile(loc.path, self.path) and
+            if (loc.path and self.path and
+                PurePath(loc.path) == PurePath(self.path) and
                 loc.lineno == self.on_line):
                 if self.hit_count > 0:
                     self.hit_count -= 1


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127099.434422.patch
Type: text/x-patch
Size: 3122 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220606/357ac63f/attachment.bin>


More information about the llvm-commits mailing list