bin/gbuild-to-ide |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

New commits:
commit 49e087ef44d3b7b26baf71469621c0a2135e00a9
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Tue Nov 2 14:40:21 2021 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Tue Nov 2 16:49:02 2021 +0100

    vs-ide-integration: make projects' GUIDs stable
    
    Use uuid.uuid5 with a custom URL to generate stable GUIDs. This avoids
    glitches in IDE when re-opening the solution after its re-generation
    makes some previously opened files to show duplicate entries in IDE's
    tabbed UI.
    
    Also drop the UniqueIdentifier elements from .vcxproj.filters files,
    which are optional and only used in VS automation [1], so are useless
    with randomly-generated GUIDs.
    
    [1] 
https://docs.microsoft.com/en-us/cpp/build/reference/vcxproj-filters-files
    
    Change-Id: I91dae730286b3187a6ceffcb9ae3afc2b479f4d9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124594
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide
index b66a641b7d34..b7c290cb8285 100755
--- a/bin/gbuild-to-ide
+++ b/bin/gbuild-to-ide
@@ -23,6 +23,7 @@ import traceback
 import subprocess
 from sys import platform
 import collections
+import urllib.parse
 
 class GbuildLinkTarget:
     def __init__(self, name, location, include, include_sys, defs, cxxobjects, 
cxxflags, cobjects, cflags, linked_libs):
@@ -962,6 +963,10 @@ class 
VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
 
         self.write_solution(os.path.join(self.solution_directory, 
'LibreOffice.sln'), all_projects)
 
+    @staticmethod
+    def gen_guid(category, name):
+        return str(uuid.uuid5(uuid.NAMESPACE_URL, 
'vnd.libreoffice.vs-ide-integration:' + category + '/' + 
urllib.parse.quote(name))).upper()
+
     nmake_project_guid = '8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942'
     nmake_folder_guid = '2150E333-8FDC-42A3-9474-1A3956D46DE8'
 
@@ -1071,7 +1076,7 @@ class 
VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
         folder = os.path.dirname(project_path)
         if not os.path.exists(folder):
             os.makedirs(folder)
-        project_guid = str(uuid.uuid4()).upper()
+        project_guid = self.gen_guid('project', target.short_name())
         cxxflags = ' '.join(target.cxxflags)
         ns = 'http://schemas.microsoft.com/developer/msbuild/2003'
         ET.register_namespace('', ns)
@@ -1232,8 +1237,6 @@ class 
VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
         filters_node = ET.SubElement(proj_node, '{%s}ItemGroup' % ns)
         for proj_filter in filters:
             filter_node = ET.SubElement(filters_node, '{%s}Filter' % ns, 
Include=proj_filter)
-            filter_id_node = ET.SubElement(filter_node, '{%s}UniqueIdentifier' 
% ns)
-            filter_id_node.text = '{%s}' % str(uuid.uuid4())
         self.write_pretty_xml(proj_node, filters_path)
 
 

Reply via email to