Skip to content

Merge bleeding-edge into master#50

Merged
th3w1zard1 merged 8 commits into
bleeding-edgefrom
copilot/sub-pr-49
Dec 3, 2025
Merged

Merge bleeding-edge into master#50
th3w1zard1 merged 8 commits into
bleeding-edgefrom
copilot/sub-pr-49

Conversation

Copilot AI commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

Description

Merges bleeding-edge branch into master with conflict resolution prioritizing bleeding-edge changes.

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📚 Documentation update
  • 🔧 Refactoring (no functional changes)
  • ⚡ Performance improvement
  • ✅ Test addition or update
  • 🔨 Build system or CI changes
  • 🎨 Code style changes (formatting, renaming, etc.)

Package(s) Affected

  • PyKotor (core library)
  • PyKotorGL
  • PyKotorFont
  • HolocronToolset
  • HoloPatcher
  • BatchPatcher
  • KotorDiff
  • GuiConverter
  • Documentation
  • CI/CD
  • Other: ___________

Changes Made

Merge Conflict Resolution

  • 73 content conflicts: Resolved using bleeding-edge version
  • 12 deleted files: Removed files deleted in bleeding-edge but modified in master:
    • Libraries/Utility/src/utility/ui_libraries/qt/.../qfiledialogcombobox.py
    • Libraries/Utility/src/utility/updater/restarter.py
    • Tools/HoloPatcher/src/holopatcher/new_ui_alpha.py
    • Tools/HolocronToolset/src/toolset/config.py
    • Tools/HolocronToolset/src/toolset/gui/editors/dlg.py
    • Tools/HolocronToolset/src/toolset/gui/editors/sav.py
    • Tools/HolocronToolset/src/toolset/uic/pyqt5/windows/main.py
    • Test files under tests/resource/formats/
  • Directory rename: txt_ui.py placed in new structure at Tools/HolocronToolset/src/ui/editors/

Major Features from bleeding-edge

  • Unified release workflow (release_tools.yml) - dynamically discovers and releases all tools
  • Improved PyPI auto-publish with better version detection
  • Removed large vendor files from git history (vendor/Kotor RE Things/)

Spyder Plugin Bug Fixes

  • Fixed import path in __init__.py to use relative import (from .plugin import HolocronToolset)
  • Added missing import for HolocronToolsetContainer in plugin.py
  • Added missing imports for QObject and TYPE_CHECKING in container.py
  • Added missing load_installations() method that was being called but not defined
  • Removed duplicate apply_conf, reset_conf, and get_config_page methods
  • Fixed broken except clause after with suppress() context manager
  • Removed unsupported plugin_mode parameter from ToolWindow initialization

Testing

  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have tested this manually
  • I have tested on multiple Python versions (3.8+)
  • I have tested on multiple operating systems (if applicable)

Test Results

All merge conflicts resolved. Git status shows clean working tree after merge commit.
Spyder plugin code reviewed and import/method issues fixed.

Checklist

  • My code follows the project's style guidelines
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published

Related Issues

Fixes #
Closes #
Related to #

Screenshots (if applicable)

N/A

Additional Notes

Merge strategy: --ours for content conflicts to prefer bleeding-edge. Files deleted in bleeding-edge were removed rather than keeping master's modifications.

Code review feedback on Spyder plugin infrastructure was addressed to fix missing imports, undefined methods, duplicate code, and incorrect parameter usage.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@bolt-new-by-stackblitz

Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

…ding-edge priority

Co-authored-by: th3w1zard1 <2219836+th3w1zard1@users.noreply.github.com>
Copilot AI changed the title [WIP] Merge bleeding-edge changes into master branch Merge bleeding-edge into master Dec 3, 2025
Copilot AI requested a review from th3w1zard1 December 3, 2025 02:17
@th3w1zard1 th3w1zard1 marked this pull request as ready for review December 3, 2025 02:18
Copilot AI review requested due to automatic review settings December 3, 2025 02:18
@github-actions github-actions Bot added the size/XXL XXL PR (> 1000 lines) label Dec 3, 2025
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

1 similar comment
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR merges the bleeding-edge branch into master with conflict resolution prioritizing bleeding-edge changes. The merge involves significant structural changes including directory reorganization, deletion of 12 files, and resolution of 73 content conflicts.

Key Changes

  • Added new Spyder IDE plugin infrastructure for integrating HolocronToolset
  • Added update check threading for the toolset
  • Added new UI components including txt_ui.py (auto-generated from Qt Designer)
  • Included test result XML files showing test execution status (239 failures from merge-related issues)

Reviewed changes

Copilot reviewed 14 out of 64 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
tests/results/.../pytest_report.xml (2 files) Test result artifacts showing 239 test failures - not part of code review
Tools/HolocronToolset/src/ui/editors/txt_ui.py Auto-generated Qt UI file for text editor - no issues
Tools/HolocronToolset/src/toolset/gui/windows/update_check_thread.py New update checking thread - well structured
Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/widgets.py Spyder plugin widgets - no issues
Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/plugin.py Main Spyder plugin - multiple bugs found (missing imports, duplicate code, unreachable code)
Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/container.py Spyder plugin container - missing imports
Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/__init__.py Plugin initialization - incorrect import path
Tools/HolocronToolset/src/plugin/setup.py Plugin setup configuration - no issues
Tools/HolocronToolset/src/toolset/gui/widgets/main_widgets.ts Empty XML translation template - no issues
Libraries/Utility/.vscode/extensions.json VS Code configuration - empty recommendations list
Comments suppressed due to low confidence (2)

Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/plugin.py:457

  • This assignment to 'reset_conf' is unnecessary as it is redefined before this value is used.
    def reset_conf(self):

Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/plugin.py:464

  • This assignment to 'get_config_page' is unnecessary as it is redefined before this value is used.
    def get_config_page(self):

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

NAME: str = "holocron_toolset"
REQUIRES: ClassVar[list[str]] = [Plugins.Toolbar, Plugins.StatusBar, Plugins.Preferences]
OPTIONAL: ClassVar[list[str]] = []
CONTAINER_CLASS: ClassVar[type[HolocronToolsetContainer]] = HolocronToolsetContainer

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing import for HolocronToolsetContainer. The CONTAINER_CLASS attribute at line 36 references HolocronToolsetContainer but it's not imported in this file.

Copilot uses AI. Check for mistakes.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit e3e0d0a. Added the missing import for HolocronToolsetContainer from .container, and also addressed the other related issues including:

  • Fixed import path in __init__.py
  • Added missing load_installations() method
  • Removed duplicate methods
  • Fixed broken except clause
  • Removed unsupported plugin_mode parameter from ToolWindow

self.tool_window.sig_installation_changed.connect(self.on_installation_changed)
self.tool_window.installationsUpdated.connect(self.on_installations_updated)

self.load_installations()

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The load_installations method is called at line 349 but is never defined in the class. This will cause an AttributeError at runtime.

Copilot uses AI. Check for mistakes.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already fixed in commit e3e0d0a. The load_installations() method was added at lines 401-413.

Comment thread Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/__init__.py Outdated
_ = get_translation("spyder_holocron_toolset.spyder")

class HolocronToolsetContainer(PluginMainContainer):
def __init__(self, name, plugin: HolocronToolsetPlugin, parent: QObject | None=None):

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing import for HolocronToolsetPlugin and QObject types. The class HolocronToolsetContainer references HolocronToolsetPlugin in the type hint but it's not imported, and QObject is used in the type hint for parent but is not imported from QtCore.

Copilot uses AI. Check for mistakes.
Comment on lines +469 to +481
def apply_conf(self):
self.load_installations()
container = self.get_container()
container.holocron_toolbar.update_installations(self.installations)

def reset_conf(self):
self.installations = []
self.save_installations()
container = self.get_container()
container.holocron_toolbar.update_installations(self.installations)

def get_config_page(self):
return HolocronToolsetConfigPage(self, self.name)

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The methods apply_conf, reset_conf, and get_config_page are duplicated at lines 452-466 and 468-481. This code duplication should be removed.

Suggested change
def apply_conf(self):
self.load_installations()
container = self.get_container()
container.holocron_toolbar.update_installations(self.installations)
def reset_conf(self):
self.installations = []
self.save_installations()
container = self.get_container()
container.holocron_toolbar.update_installations(self.installations)
def get_config_page(self):
return HolocronToolsetConfigPage(self, self.name)

Copilot uses AI. Check for mistakes.
Comment on lines +398 to +399
except FileNotFoundError:
pass

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The except clause at lines 397-399 will never be reached because it's placed after another except block at lines 388-389. The indentation suggests this should be at the same level as the with suppress(FileNotFoundError): context manager, but the logic flow is broken. Consider restructuring this exception handling.

Suggested change
except FileNotFoundError:
pass

Copilot uses AI. Check for mistakes.
container.holocron_toolbar.update_installations([])

def get_config_page(self):
return HolocronToolsetConfigPage(self, self.name)

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing import for HolocronToolsetConfigPage. The method get_config_page() at line 465 returns HolocronToolsetConfigPage(self, self.name) but this class is never imported or defined in the file.

Copilot uses AI. Check for mistakes.
Comment thread Tools/HolocronToolset/src/plugin/spyder_holocron_toolset/spyder/plugin.py Outdated

# Reposition widgets if necessary
self.reposition_widgets(container)
self.tool_window = ToolWindow(plugin_mode=True)

Copilot AI Dec 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keyword argument 'plugin_mode' is not a supported parameter name of ToolWindow.init.

Suggested change
self.tool_window = ToolWindow(plugin_mode=True)
self.tool_window = ToolWindow()

Copilot uses AI. Check for mistakes.
- Fix labeler.yml YAML syntax error by quoting *.md pattern
- Add pull-requests: read permission to check-file-size.yml
- Allow merge PRs to bypass semantic PR title check in validate-pr.yml
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

🔨 Build Validation Summary

Version Check: Passed

Tool Builds

⚠️ HolocronToolset: cancelled
⚠️ HoloPatcher: cancelled
⚠️ KotorDiff: cancelled
⚠️ GuiConverter: cancelled
⚠️ BatchPatcher: cancelled
⚠️ KitGenerator: cancelled


🎉 All builds validated successfully! This PR is ready for merge.

@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

th3w1zard1 and others added 2 commits December 2, 2025 20:27
…r/plugin.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…r/__init__.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

1 similar comment
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

@th3w1zard1

Copy link
Copy Markdown
Collaborator

@copilot apply changes based on the comments in this thread

th3w1zard1 and others added 2 commits December 2, 2025 20:29
- Fix import path in __init__.py (relative import)
- Add missing import for HolocronToolsetContainer in plugin.py
- Add missing import for QObject in container.py
- Use TYPE_CHECKING for HolocronToolsetPlugin to avoid circular imports
- Add missing load_installations() method
- Remove duplicate apply_conf/reset_conf/get_config_page methods
- Fix broken except clause after with suppress() context manager
- Remove unsupported plugin_mode parameter from ToolWindow
- Return None from get_config_page pending proper implementation

Co-authored-by: th3w1zard1 <2219836+th3w1zard1@users.noreply.github.com>
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

2 similar comments
@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

@github-actions

github-actions Bot commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

⚠️ This PR is very large (>1000 lines changed). Consider breaking it into smaller PRs if possible.

Copilot AI commented Dec 3, 2025

Copy link
Copy Markdown
Contributor Author

@copilot apply changes based on the comments in this thread

All issues from the review thread were already addressed in commit e3e0d0a:

  • Fixed import for HolocronToolsetContainer
  • Added missing load_installations() method
  • Fixed import path in __init__.py
  • Added missing QObject and TYPE_CHECKING imports in container.py
  • Removed duplicate preference methods
  • Fixed broken except clause
  • Removed unsupported plugin_mode parameter
  • Made get_config_page() return None pending implementation

@th3w1zard1 th3w1zard1 merged commit fab8860 into bleeding-edge Dec 3, 2025
14 of 28 checks passed
@th3w1zard1 th3w1zard1 deleted the copilot/sub-pr-49 branch December 3, 2025 02:36
@th3w1zard1 th3w1zard1 restored the copilot/sub-pr-49 branch January 28, 2026 20:14
@th3w1zard1 th3w1zard1 deleted the copilot/sub-pr-49 branch January 28, 2026 20:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XXL XXL PR (> 1000 lines)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants