Skip to content

Commit

Permalink
EdkRepo: Add support for subst drives
Browse files Browse the repository at this point in the history
get_workspace_path() now converts a virtual drive path
to a real path before any git repo operations are done.

Cc: Ashley E Desimone <[email protected]>
Cc: Puja Pandya <[email protected]>
Cc: Bret Barkelew <[email protected]>
Cc: Prince Agyeman <[email protected]>
Cc: Erik Bjorge <[email protected]>
Signed-off-by: Nate DeSimone <[email protected]>
Reviewed-by: Ashley DeSimone <[email protected]>
Reviewed-by: Erik Bjorge <[email protected]>
  • Loading branch information
nate-desimone committed Oct 9, 2020
1 parent 0e3fb4b commit 04b701e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
8 changes: 8 additions & 0 deletions edkrepo/commands/clone_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import os
import shutil
import sys

from edkrepo.commands.edkrepo_command import EdkrepoCommand
from edkrepo.commands.edkrepo_command import SubmoduleSkipArgument, SourceManifestRepoArgument
Expand All @@ -20,6 +21,7 @@
from edkrepo.common.edkrepo_exception import EdkrepoManifestNotFoundException
from edkrepo.common.humble import CLONE_INVALID_WORKSPACE, CLONE_INVALID_PROJECT_ARG, CLONE_INVALID_COMBO_ARG
from edkrepo.common.humble import SPARSE_CHECKOUT, CLONE_INVALID_LOCAL_ROOTS
from edkrepo.common.pathfix import get_subst_drive_dict
from edkrepo.common.workspace_maintenance.workspace_maintenance import case_insensitive_single_match
from edkrepo.common.workspace_maintenance.manifest_repos_maintenance import pull_all_manifest_repos, find_project_in_all_indices
from edkrepo.common.workspace_maintenance.manifest_repos_maintenance import list_available_manifest_repos
Expand Down Expand Up @@ -77,6 +79,12 @@ def run_command(self, args, config):
workspace_dir = os.getcwd()
else:
workspace_dir = os.path.abspath(workspace_dir)
if sys.platform == "win32":
subst = get_subst_drive_dict()
drive = os.path.splitdrive(workspace_dir)[0][0].upper()
if drive in subst:
workspace_dir = os.path.join(subst[drive], os.path.splitdrive(workspace_dir)[1][1:])
workspace_dir = os.path.normpath(workspace_dir)
if os.path.isdir(workspace_dir) and os.listdir(workspace_dir):
raise EdkrepoInvalidParametersException(CLONE_INVALID_WORKSPACE)
if not os.path.isdir(workspace_dir):
Expand Down
10 changes: 9 additions & 1 deletion edkrepo/config/config_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
import sys
import configparser
import collections
from ctypes import *
if sys.platform == "win32":
from ctypes import oledll, c_void_p, c_uint32, c_wchar_p
from ctypes import create_unicode_buffer

import edkrepo.config.humble.config_factory_humble as humble
from edkrepo.common.edkrepo_exception import EdkrepoGlobalConfigNotFoundException, EdkrepoConfigFileInvalidException
from edkrepo.common.edkrepo_exception import EdkrepoWorkspaceInvalidException, EdkrepoGlobalDataDirectoryNotFoundException
from edkrepo.common.edkrepo_exception import EdkrepoConfigFileReadOnlyException
from edkrepo.common.humble import MIRROR_PRIMARY_REPOS_MISSING, MIRROR_DECODE_WARNING, MAX_PATCH_SET_INVALID
from edkrepo.common.pathfix import get_subst_drive_dict
from edkrepo_manifest_parser import edk_manifest
from edkrepo.common.pathfix import expanduser

Expand Down Expand Up @@ -238,6 +241,11 @@ def get_workspace_path():
while True:
if os.path.isdir(os.path.join(path, "repo")):
if os.path.isfile(os.path.join(os.path.join(path, "repo"), "Manifest.xml")):
if sys.platform == "win32":
subst = get_subst_drive_dict()
drive = os.path.splitdrive(path)[0][0].upper()
if drive in subst:
path = os.path.join(subst[drive], os.path.splitdrive(path)[1][1:])
return path
if os.path.dirname(path) == path:
break
Expand Down

0 comments on commit 04b701e

Please sign in to comment.