summaryrefslogtreecommitdiff
path: root/xmake/core/base/os.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/core/base/os.lua')
-rw-r--r--xmake/core/base/os.lua43
1 files changed, 27 insertions, 16 deletions
diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua
index cecf38dd2..57046813e 100644
--- a/xmake/core/base/os.lua
+++ b/xmake/core/base/os.lua
@@ -39,6 +39,7 @@ os._mkdir = os._mkdir or os.mkdir
os._rmdir = os._rmdir or os.rmdir
os._touch = os._touch or os.touch
os._tmpdir = os._tmpdir or os.tmpdir
+os._curdir = os._curdir or os.curdir
os._fscase = os._fscase or os.fscase
os._setenv = os._setenv or os.setenv
os._getenvs = os._getenvs or os.getenvs
@@ -197,6 +198,14 @@ function os._sched_chdir_set(chdir)
os._SCHED_CHDIR = chdir
end
+-- notify the current directory have been changed
+function os._notify_curdir_changed()
+ os._CURDIR = nil
+ if os._SCHED_CHDIR then
+ os._SCHED_CHDIR(os.curdir())
+ end
+end
+
-- notify envs have been changed
function os._notify_envs_changed(envs)
if os._SCHED_CHENVS then
@@ -605,41 +614,33 @@ function os.cd(dir)
-- support path instance
dir = tostring(dir)
- -- the previous directory
- local oldir = os.curdir()
-
-- change to the previous directory?
+ local oldir = os.curdir()
if dir == "-" then
- -- exists the previous directory?
if os._PREDIR then
dir = os._PREDIR
os._PREDIR = nil
else
- -- error
return nil, string.format("not found the previous directory %s", os.strerror())
end
end
- -- is directory?
- if os.isdir(dir) then
+ -- no changed?
+ if dir == oldir then
+ return oldir
+ end
- -- change to directory
+ -- do change directory
+ if os.isdir(dir) then
if not os.chdir(dir) then
return nil, string.format("cannot change directory %s %s", dir, os.strerror())
end
-
- -- save the previous directory
os._PREDIR = oldir
-
- -- not exists?
else
return nil, string.format("cannot change directory %s, not found this directory %s", dir, os.strerror())
end
- -- do chdir callback for scheduler
- if os._SCHED_CHDIR then
- os._SCHED_CHDIR(os.curdir())
- end
+ os._notify_curdir_changed()
return oldir
end
@@ -695,6 +696,16 @@ function os.rmdir(dir)
return true
end
+-- get the current directory
+function os.curdir()
+ local curdir = os._CURDIR
+ if curdir == nil then
+ curdir = os._curdir()
+ os._CURDIR = curdir
+ end
+ return curdir
+end
+
-- get the temporary directory
function os.tmpdir(opt)