Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ func _on_plugin_updated(plugin):
## Known Limitations

- Godot always show errors from plugin repositories in `./plugged` even with `.gdignore` (See [#32](https://github.com/imjp94/gd-plug/issues/32))
- This can be worked around by placing the `.plugged` folder within `addons`, e.g. `addons/gd-plug/.plugged`
- Sometimes random .import files will be unable to remove, while the reason behind it still remains unknown.
- Workaround: Read output for those .import files that failed to remove, and manually delete them.
- `autoload` script references in project setting are not cleared as plugin uninstalled.
Expand Down
47 changes: 27 additions & 20 deletions addons/gd-plug/plug.gd
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ func remove_installed_plugin(plugin_name):
_mutex.unlock()
return result

func directory_copy_recursively(from, to, args={}):
func directory_copy_recursively(from, to, args={}, from_root = from):
var include = args.get("include", [])
var exclude = args.get("exclude", [])
var test = args.get("test", false)
Expand All @@ -589,33 +589,40 @@ func directory_copy_recursively(from, to, args={}):
while not file_name.is_empty():
var source = dir.get_current_dir() + ("/" if dir.get_current_dir() != "res://" else "") + file_name
var dest = to + ("/" if to != "res://" else "") + file_name
var include_test_source = source.erase(0, from_root.length())

if dir.current_is_dir():
dest_files += directory_copy_recursively(source, dest, args)
else:
for include_key in include:
if include_key in source:
var is_excluded = false
for exclude_key in exclude:
if exclude_key in source:
is_excluded = true
break
if not is_excluded:
if test:
if not silent_test: logger.warn("[TEST] Writing to %s" % dest)
else:
dir.make_dir_recursive(to)
if dir.copy(source, dest) == OK:
logger.debug("Copy from %s to %s" % [source, dest])
dest_files.append(dest)
break
if !_test_path_includes_any_key(exclude, include_test_source):
if dir.current_is_dir():
dest_files += directory_copy_recursively(source, dest, args, from_root)
else:
if _test_path_includes_any_key(include, include_test_source):
if test:
if !silent_test:
logger.warn("[TEST] Writing to %s" % dest)
else:
dir.make_dir_recursive(to)
if dir.copy(source, dest) == OK:
logger.debug("Copy from %s to %s" % [source, dest])
dest_files.append(dest)
file_name = dir.get_next()
dir.list_dir_end()
else:
logger.error("Failed to access path: %s" % from)

return dest_files

func _test_path_includes_any_key(keys, path):
for key in keys:
if key.begins_with("res://"):
key = key.erase(0, "res:/".length())
if path.begins_with(key):
return true
continue

if key in path:
return true
return false

func directory_delete_recursively(dir_path, args={}):
var remove_empty_directory = args.get("remove_empty_directory", true)
var exclude = args.get("exclude", [])
Expand Down