[edk2-devel] [edk2-staging/EdkRepo] [PATCH V2 2/2] EdkRepo: Add support for subst drives

Nate DeSimone posted 2 patches 5 years, 5 months ago
There is a newer version of this series
[edk2-devel] [edk2-staging/EdkRepo] [PATCH V2 2/2] EdkRepo: Add support for subst drives
Posted by Nate DeSimone 5 years, 5 months ago
get_workspace_path() now converts a virtual drive path
to a real path before any git repo operations are done.

Cc: Ashley E Desimone <ashley.e.desimone@intel.com>
Cc: Puja Pandya <puja.pandya@intel.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Erik Bjorge <erik.c.bjorge@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
---
 edkrepo/commands/clone_command.py |  6 ++++++
 edkrepo/config/config_factory.py  | 10 +++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/edkrepo/commands/clone_command.py b/edkrepo/commands/clone_command.py
index f638090..be5ad86 100644
--- a/edkrepo/commands/clone_command.py
+++ b/edkrepo/commands/clone_command.py
@@ -20,6 +20,7 @@ from edkrepo.common.edkrepo_exception import EdkrepoInvalidParametersException,
 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
@@ -77,6 +78,11 @@ class CloneCommand(EdkrepoCommand):
             workspace_dir = os.getcwd()
         else:
             workspace_dir = os.path.abspath(workspace_dir)
+        subst = get_subst_drive_dict()
+        for drive in subst.keys():
+            if '{}:'.format(drive) == os.path.splitdrive(workspace_dir)[0].upper():
+                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):
diff --git a/edkrepo/config/config_factory.py b/edkrepo/config/config_factory.py
index a82a438..1cb6eb7 100644
--- a/edkrepo/config/config_factory.py
+++ b/edkrepo/config/config_factory.py
@@ -11,13 +11,16 @@ import os
 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
 
@@ -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()
+                    for drive in subst.keys():
+                        if '{}:'.format(drive) == os.path.splitdrive(path)[0].upper():
+                            path = os.path.join(subst[drive], os.path.splitdrive(path)[1][1:])
                 return path
         if os.path.dirname(path) == path:
             break
-- 
2.27.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#64862): https://edk2.groups.io/g/devel/message/64862
Mute This Topic: https://groups.io/mt/76541439/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [edk2-staging/EdkRepo] [PATCH V2 2/2] EdkRepo: Add support for subst drives
Posted by Carsey, Jaben 5 years, 5 months ago
Instead of looping over the dictionary, could we convert the target drive and see if it's in the dictionary? 

I am thinking like remove the : from os.path.splitdrive(workspace_dir)[0].upper() string and see if that's in the dictionary?


> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Nate
> DeSimone
> Sent: Monday, August 31, 2020 12:28 PM
> To: devel@edk2.groups.io
> Cc: Desimone, Ashley E <ashley.e.desimone@intel.com>; Pandya, Puja
> <puja.pandya@intel.com>; Bret Barkelew <Bret.Barkelew@microsoft.com>;
> Agyeman, Prince <prince.agyeman@intel.com>; Bjorge, Erik C
> <erik.c.bjorge@intel.com>
> Subject: [edk2-devel] [edk2-staging/EdkRepo] [PATCH V2 2/2] EdkRepo: Add
> support for subst drives
> 
> get_workspace_path() now converts a virtual drive path to a real path before
> any git repo operations are done.
> 
> Cc: Ashley E Desimone <ashley.e.desimone@intel.com>
> Cc: Puja Pandya <puja.pandya@intel.com>
> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Erik Bjorge <erik.c.bjorge@intel.com>
> Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
> ---
>  edkrepo/commands/clone_command.py |  6 ++++++
> edkrepo/config/config_factory.py  | 10 +++++++++-
>  2 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/edkrepo/commands/clone_command.py
> b/edkrepo/commands/clone_command.py
> index f638090..be5ad86 100644
> --- a/edkrepo/commands/clone_command.py
> +++ b/edkrepo/commands/clone_command.py
> @@ -20,6 +20,7 @@ from edkrepo.common.edkrepo_exception import
> EdkrepoInvalidParametersException,
>  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 @@ -77,6 +78,11 @@ class
> CloneCommand(EdkrepoCommand):
>              workspace_dir = os.getcwd()
>          else:
>              workspace_dir = os.path.abspath(workspace_dir)
> +        subst = get_subst_drive_dict()
> +        for drive in subst.keys():
> +            if '{}:'.format(drive) == os.path.splitdrive(workspace_dir)[0].upper():
> +                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):
> diff --git a/edkrepo/config/config_factory.py
> b/edkrepo/config/config_factory.py
> index a82a438..1cb6eb7 100644
> --- a/edkrepo/config/config_factory.py
> +++ b/edkrepo/config/config_factory.py
> @@ -11,13 +11,16 @@ import os
>  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
> 
> @@ -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()
> +                    for drive in subst.keys():
> +                        if '{}:'.format(drive) == os.path.splitdrive(path)[0].upper():
> +                            path = os.path.join(subst[drive],
> + os.path.splitdrive(path)[1][1:])
>                  return path
>          if os.path.dirname(path) == path:
>              break
> --
> 2.27.0.windows.1
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#64923): https://edk2.groups.io/g/devel/message/64923
Mute This Topic: https://groups.io/mt/76541439/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-