From a71b5e1f11d4a0782ca1e65a4f181a270b94d2f2 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sat, 10 Jun 2023 22:04:01 +0100 Subject: [PATCH] BlenderBIM operator to add remote repo (#3096) Procedure to merge a pull request would be: Add Remote, select the added remote in the pull-down, Fetch from remote, select the added remote branch in the pull-down, Merge, delete remote --- .../blenderbim/bim/module/ifcgit/__init__.py | 1 + .../blenderbim/bim/module/ifcgit/operator.py | 32 ++++++++++++++++++- .../blenderbim/bim/module/ifcgit/prop.py | 5 +++ .../blenderbim/bim/module/ifcgit/ui.py | 8 +++++ src/blenderbim/blenderbim/core/ifcgit.py | 4 +++ src/blenderbim/blenderbim/tool/ifcgit.py | 7 ++++ 6 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/ifcgit/__init__.py b/src/blenderbim/blenderbim/bim/module/ifcgit/__init__.py index 5b2a2a8fb7..27352bbc3e 100644 --- a/src/blenderbim/blenderbim/bim/module/ifcgit/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/ifcgit/__init__.py @@ -21,6 +21,7 @@ from . import ui, prop, operator classes = ( operator.AddFileToRepo, + operator.AddRemote, operator.AddTag, operator.CloneRepo, operator.CommitChanges, diff --git a/src/blenderbim/blenderbim/bim/module/ifcgit/operator.py b/src/blenderbim/blenderbim/bim/module/ifcgit/operator.py index 2d7e9b43ad..b1e5102308 100644 --- a/src/blenderbim/blenderbim/bim/module/ifcgit/operator.py +++ b/src/blenderbim/blenderbim/bim/module/ifcgit/operator.py @@ -82,6 +82,7 @@ class CloneRepo(bpy.types.Operator): props = context.scene.IfcGitProperties core.clone_repo(tool.IfcGit, props.remote_url, props.local_folder, self) + props.remote_url = "" refresh() return {"FINISHED"} @@ -303,6 +304,36 @@ class Fetch(bpy.types.Operator): return {"FINISHED"} +class AddRemote(bpy.types.Operator): + """Add a remote repository""" + + bl_label = "Add Remote" + bl_idname = "ifcgit.add_remote" + bl_options = {"REGISTER"} + + @classmethod + def poll(cls, context): + IfcGitData.make_sure_is_loaded() + props = context.scene.IfcGitProperties + repo = IfcGitData.data["repo"] + if ( + not repo + or not tool.IfcGit.is_valid_ref_format(props.remote_name) + or props.remote_name in [remote.name for remote in repo.remotes] + or not props.remote_url + ): + return False + return True + + def execute(self, context): + + repo = IfcGitData.data["repo"] + core.add_remote(tool.IfcGit, repo) + bpy.ops.ifcgit.refresh() + refresh() + return {"FINISHED"} + + class DeleteRemote(bpy.types.Operator): """Delete the selected remote""" @@ -312,7 +343,6 @@ class DeleteRemote(bpy.types.Operator): def execute(self, context): - props = context.scene.IfcGitProperties repo = IfcGitData.data["repo"] core.delete_remote(tool.IfcGit, repo) bpy.ops.ifcgit.refresh() diff --git a/src/blenderbim/blenderbim/bim/module/ifcgit/prop.py b/src/blenderbim/blenderbim/bim/module/ifcgit/prop.py index 7a1655be24..ca9266d0e8 100644 --- a/src/blenderbim/blenderbim/bim/module/ifcgit/prop.py +++ b/src/blenderbim/blenderbim/bim/module/ifcgit/prop.py @@ -113,6 +113,11 @@ class IfcGitProperties(PropertyGroup): description="An optional human readable description of this tag", default="", ) + remote_name: StringProperty( + name="New remote name", + description="A local name for a remote Git repository", + default="", + ) remote_url: StringProperty( name="Git URL", description="A URL pointing to a Git repository", diff --git a/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py b/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py index 12a82bf2c1..e07ab65465 100644 --- a/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py +++ b/src/blenderbim/blenderbim/bim/module/ifcgit/ui.py @@ -171,6 +171,14 @@ class IFCGIT_PT_panel(bpy.types.Panel): row.operator("ifcgit.push", icon="EXPERIMENTAL") row.operator("ifcgit.fetch", icon="IMPORT") + box = layout.box() + row = box.row() + row.prop(props, "remote_name") + row = box.row() + row.prop(props, "remote_url") + row = box.row() + row.operator("ifcgit.add_remote", icon="IMPORT") + class COMMIT_UL_List(bpy.types.UIList): """List of Git commits""" diff --git a/src/blenderbim/blenderbim/core/ifcgit.py b/src/blenderbim/blenderbim/core/ifcgit.py index 68033f911c..24e89cbf92 100644 --- a/src/blenderbim/blenderbim/core/ifcgit.py +++ b/src/blenderbim/blenderbim/core/ifcgit.py @@ -42,6 +42,10 @@ def delete_tag(ifcgit, repo, tag_name): ifcgit.delete_tag(repo, tag_name) +def add_remote(ifcgit, repo): + ifcgit.add_remote(repo) + + def delete_remote(ifcgit, repo): ifcgit.delete_remote(repo) diff --git a/src/blenderbim/blenderbim/tool/ifcgit.py b/src/blenderbim/blenderbim/tool/ifcgit.py index dfe10d7b64..ef9b4b770c 100644 --- a/src/blenderbim/blenderbim/tool/ifcgit.py +++ b/src/blenderbim/blenderbim/tool/ifcgit.py @@ -102,6 +102,13 @@ class IfcGit: if tag_name in repo.tags: repo.delete_tag(tag_name) + @classmethod + def add_remote(cls, repo): + props = bpy.context.scene.IfcGitProperties + repo.create_remote(name=props.remote_name, url=props.remote_url) + props.remote_name = "" + props.remote_url = "" + @classmethod def delete_remote(cls, repo): props = bpy.context.scene.IfcGitProperties