From 613a9a2c76d1352dfb386098f642d22d70746469 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Fri, 20 Mar 2026 08:34:45 +0100 Subject: [PATCH 1/7] [ADD] vcp_git --- vcp_git/README.rst | 80 +++++ vcp_git/__init__.py | 1 + vcp_git/__manifest__.py | 17 + vcp_git/models/__init__.py | 3 + vcp_git/models/vcp_platform.py | 14 + vcp_git/models/vcp_repository.py | 12 + vcp_git/models/vcp_repository_branch.py | 27 ++ vcp_git/pyproject.toml | 3 + vcp_git/readme/CONTRIBUTORS.md | 2 + vcp_git/readme/DESCRIPTION.md | 3 + vcp_git/static/description/icon.png | Bin 0 -> 9455 bytes vcp_git/static/description/index.html | 427 ++++++++++++++++++++++++ vcp_git/tests/__init__.py | 1 + vcp_git/tests/test_vcp_rule.py | 147 ++++++++ 14 files changed, 737 insertions(+) create mode 100644 vcp_git/README.rst create mode 100644 vcp_git/__init__.py create mode 100644 vcp_git/__manifest__.py create mode 100644 vcp_git/models/__init__.py create mode 100644 vcp_git/models/vcp_platform.py create mode 100644 vcp_git/models/vcp_repository.py create mode 100644 vcp_git/models/vcp_repository_branch.py create mode 100644 vcp_git/pyproject.toml create mode 100644 vcp_git/readme/CONTRIBUTORS.md create mode 100644 vcp_git/readme/DESCRIPTION.md create mode 100644 vcp_git/static/description/icon.png create mode 100644 vcp_git/static/description/index.html create mode 100644 vcp_git/tests/__init__.py create mode 100644 vcp_git/tests/test_vcp_rule.py diff --git a/vcp_git/README.rst b/vcp_git/README.rst new file mode 100644 index 0000000..50a00e1 --- /dev/null +++ b/vcp_git/README.rst @@ -0,0 +1,80 @@ +======= +Vcp Git +======= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:086596db3dcb4fa7565fc97cf01ccd22449731243622d4587a1f609eab8bc121 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fversion--control--platform-lightgray.png?logo=github + :target: https://github.com/OCA/version-control-platform/tree/18.0/vcp_git + :alt: OCA/version-control-platform +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/version-control-platform-18-0/version-control-platform-18-0-vcp_git + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/version-control-platform&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the necessary code to download using git. + +It should be parent on git possible origins, like github or gitlab. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Dixmit + +Contributors +------------ + +- `Dixmit `__ + + - Enric Tobella + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/version-control-platform `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/vcp_git/__init__.py b/vcp_git/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/vcp_git/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/vcp_git/__manifest__.py b/vcp_git/__manifest__.py new file mode 100644 index 0000000..73cf209 --- /dev/null +++ b/vcp_git/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Vcp Git", + "summary": """Allows to download code from git""", + "version": "18.0.1.0.0", + "license": "AGPL-3", + "author": "Dixmit,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/version-control-platform", + "depends": [ + "vcp_management", + ], + "external_dependencies": { + "python": ["GitPython"], + }, +} diff --git a/vcp_git/models/__init__.py b/vcp_git/models/__init__.py new file mode 100644 index 0000000..102fee0 --- /dev/null +++ b/vcp_git/models/__init__.py @@ -0,0 +1,3 @@ +from . import vcp_repository_branch +from . import vcp_platform +from . import vcp_repository diff --git a/vcp_git/models/vcp_platform.py b/vcp_git/models/vcp_platform.py new file mode 100644 index 0000000..4e25826 --- /dev/null +++ b/vcp_git/models/vcp_platform.py @@ -0,0 +1,14 @@ +# Copyright 2026 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import logging + +from odoo import models + +_logger = logging.getLogger(__name__) + + +class VcpPlatform(models.Model): + _inherit = "vcp.platform" + + def _get_git_url(self, repository): + return getattr(self, f"_get_git_url_{self.kind}")(repository) diff --git a/vcp_git/models/vcp_repository.py b/vcp_git/models/vcp_repository.py new file mode 100644 index 0000000..63d2017 --- /dev/null +++ b/vcp_git/models/vcp_repository.py @@ -0,0 +1,12 @@ +# Copyright 2026 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class VcpRepository(models.Model): + _inherit = "vcp.repository" + + def _get_git_url(self): + self.ensure_one() + return self.platform_id._get_git_url(self) diff --git a/vcp_git/models/vcp_repository_branch.py b/vcp_git/models/vcp_repository_branch.py new file mode 100644 index 0000000..df32146 --- /dev/null +++ b/vcp_git/models/vcp_repository_branch.py @@ -0,0 +1,27 @@ +# Copyright 2026 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import git + +from odoo import models + + +class VcpRepositoryBranch(models.Model): + _inherit = "vcp.repository.branch" + + def _download_code_git(self, local_path): + try: + repo = git.Repo(local_path) + for remote in repo.remotes: + if remote.url == self.repository_id._get_git_url(): + remote.fetch(self.branch_id.name) + repo.git.reset("--hard", f"{remote.name}/{self.branch_id.name}") + break + except git.exc.InvalidGitRepositoryError: + # Not cloned yet + repo = git.Repo.clone_from( + self.repository_id._get_git_url(), + local_path, + branch=self.branch_id.name, + depth=1, + ) diff --git a/vcp_git/pyproject.toml b/vcp_git/pyproject.toml new file mode 100644 index 0000000..4231d0c --- /dev/null +++ b/vcp_git/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/vcp_git/readme/CONTRIBUTORS.md b/vcp_git/readme/CONTRIBUTORS.md new file mode 100644 index 0000000..2c066ba --- /dev/null +++ b/vcp_git/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Dixmit](https://www.dixmit.com) + - Enric Tobella diff --git a/vcp_git/readme/DESCRIPTION.md b/vcp_git/readme/DESCRIPTION.md new file mode 100644 index 0000000..37884f9 --- /dev/null +++ b/vcp_git/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module adds the necessary code to download using git. + +It should be parent on git possible origins, like github or gitlab. diff --git a/vcp_git/static/description/icon.png b/vcp_git/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/vcp_git/static/description/index.html b/vcp_git/static/description/index.html new file mode 100644 index 0000000..f64f236 --- /dev/null +++ b/vcp_git/static/description/index.html @@ -0,0 +1,427 @@ + + + + + +Vcp Git + + + +
+

Vcp Git

+ + +

Beta License: AGPL-3 OCA/version-control-platform Translate me on Weblate Try me on Runboat

+

This module adds the necessary code to download using git.

+

It should be parent on git possible origins, like github or gitlab.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Dixmit
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/version-control-platform project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/vcp_git/tests/__init__.py b/vcp_git/tests/__init__.py new file mode 100644 index 0000000..45b614a --- /dev/null +++ b/vcp_git/tests/__init__.py @@ -0,0 +1 @@ +from . import test_vcp_rule diff --git a/vcp_git/tests/test_vcp_rule.py b/vcp_git/tests/test_vcp_rule.py new file mode 100644 index 0000000..1223d9f --- /dev/null +++ b/vcp_git/tests/test_vcp_rule.py @@ -0,0 +1,147 @@ +# Copyright 2026 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import os +import tempfile +from unittest.mock import MagicMock, patch + +from odoo.fields import Date + +from odoo.addons.base.tests.common import TransactionCase + + +class TestVcpRules(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.host_type = cls.env["vcp.host.type"].create( + { + "name": "Dummy", + "code": "dummy", + "code_kind": "git", + } + ) + cls.host = cls.env["vcp.host"].create( + { + "name": "Dummy Platform", + "type_id": cls.host_type.id, + } + ) + # be sure some expected values are set otherwise homepage may fail + cls.platform = cls.env["vcp.platform"].create( + { + "name": "oca", + "short_description": "OCA", + "description": "OCA", + "host_id": cls.host.id, + } + ) + cls.repository = cls.env["vcp.repository"].create( + { + "name": "contributors-module", + "description": "OCA/contributors-module", + "platform_id": cls.platform.id, + "from_date": Date.today(), + } + ) + cls.branch = cls.env["vcp.branch"].create( + { + "name": "main", + "platform_id": cls.platform.id, + } + ) + cls.repository_branch = cls.env["vcp.repository.branch"].create( + { + "repository_id": cls.repository.id, + "branch_id": cls.branch.id, + } + ) + cls.rule = cls.env["vcp.rule"].create( + { + "name": "Test Rule", + "rule_type": "cloc", + } + ) + + def setUp(self): + super().setUp() + self._tmp_dir = tempfile.TemporaryDirectory(prefix="vcp-git") + self.env["ir.config_parameter"].sudo().set_param( + "vcp_management.source_code_local_path", self._tmp_dir.name + ) + self.addCleanup(self._tmp_dir.cleanup) + + def test_process_rules(self): + self.platform.rule_ids = self.rule + self.assertFalse(os.path.exists(self.repository_branch.local_path)) + self.assertFalse(self.repository_branch.rule_information_ids) + with ( + patch( + "odoo.addons.vcp_git.models.vcp_platform.VcpPlatform._get_git_url" + ) as mock_git_url, + patch( + "odoo.addons.vcp_git.models.vcp_repository_branch.git.Repo.clone_from" + ) as mock_clone_from, + ): + os.makedirs(self.repository_branch.local_path, exist_ok=True) + with open(f"{self.repository_branch.local_path}/demofile.py", "w") as f: + f.write(""" +print('Hello World') + +# This is a comment + +print('Bye bye world') +""") + self.repository_branch.process_rules() + mock_git_url.assert_called_once() + mock_clone_from.assert_called_once() + self.repository_branch.invalidate_recordset() + self.assertTrue(self.repository_branch.rule_information_ids) + rule_info = self.repository_branch.rule_information_ids.filtered( + lambda x: x.rule_id == self.rule + ) + self.assertEqual(rule_info.scanned_files, 1) + self.assertEqual(rule_info.code_count, 2) + self.assertEqual(rule_info.documentation_count, 1) + self.assertEqual(rule_info.empty_count, 3) + self.assertEqual(rule_info.total_count, 6) + + def test_process_rules_update(self): + self.platform.rule_ids = self.rule + self.assertFalse(os.path.exists(self.repository_branch.local_path)) + self.assertFalse(self.repository_branch.rule_information_ids) + with ( + patch( + "odoo.addons.vcp_git.models.vcp_platform.VcpPlatform._get_git_url" + ) as mock_git_url, + patch( + "odoo.addons.vcp_git.models.vcp_repository_branch.git.Repo" + ) as mock_git_repo, + ): + mock_git_url.return_value = "https://example.com/repo.git" + os.makedirs(self.repository_branch.local_path, exist_ok=True) + with open(f"{self.repository_branch.local_path}/demofile.py", "w") as f: + f.write(""" +print('Hello World') + +# This is a comment + +print('Bye bye world') +""") + + mock_git_repo.return_value.remotes = [ + MagicMock(name="origin", url="https://example.com/repo.git") + ] + self.repository_branch.process_rules() + mock_git_url.assert_called_once() + mock_git_repo.assert_called_once() + self.repository_branch.invalidate_recordset() + self.assertTrue(self.repository_branch.rule_information_ids) + rule_info = self.repository_branch.rule_information_ids.filtered( + lambda x: x.rule_id == self.rule + ) + self.assertEqual(rule_info.scanned_files, 1) + self.assertEqual(rule_info.code_count, 2) + self.assertEqual(rule_info.documentation_count, 1) + self.assertEqual(rule_info.empty_count, 3) + self.assertEqual(rule_info.total_count, 6) From 4dfe917b83831c7dda754636b0c442eb8d11cf2b Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 1 Apr 2026 08:00:44 +0000 Subject: [PATCH 2/7] [UPD] Update vcp_git.pot --- vcp_git/i18n/vcp_git.pot | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 vcp_git/i18n/vcp_git.pot diff --git a/vcp_git/i18n/vcp_git.pot b/vcp_git/i18n/vcp_git.pot new file mode 100644 index 0000000..45506e9 --- /dev/null +++ b/vcp_git/i18n/vcp_git.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * vcp_git +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: vcp_git +#: model:ir.model,name:vcp_git.model_vcp_repository_branch +msgid "Links Branches with Repositories" +msgstr "" + +#. module: vcp_git +#: model:ir.model,name:vcp_git.model_vcp_repository +msgid "Repository" +msgstr "" + +#. module: vcp_git +#: model:ir.model,name:vcp_git.model_vcp_platform +msgid "VCP Platform" +msgstr "" From ec9a33ba3b8889f68a7dc7794be243cb7daaa11f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 1 Apr 2026 08:04:26 +0000 Subject: [PATCH 3/7] [BOT] post-merge updates --- vcp_git/README.rst | 8 ++++++-- vcp_git/static/description/index.html | 26 ++++++++++++++++---------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/vcp_git/README.rst b/vcp_git/README.rst index 50a00e1..a3a513f 100644 --- a/vcp_git/README.rst +++ b/vcp_git/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ======= Vcp Git ======= @@ -7,13 +11,13 @@ Vcp Git !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:086596db3dcb4fa7565fc97cf01ccd22449731243622d4587a1f609eab8bc121 + !! source digest: sha256:1ca94913950dfe5023e3cbc4dfea32bd9c2afba8382c77319676bceda2cb69ae !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fversion--control--platform-lightgray.png?logo=github diff --git a/vcp_git/static/description/index.html b/vcp_git/static/description/index.html index f64f236..47f97aa 100644 --- a/vcp_git/static/description/index.html +++ b/vcp_git/static/description/index.html @@ -3,7 +3,7 @@ -Vcp Git +README.rst -
-

Vcp Git

+
+ + +Odoo Community Association + +
+

Vcp Git

-

Beta License: AGPL-3 OCA/version-control-platform Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/version-control-platform Translate me on Weblate Try me on Runboat

This module adds the necessary code to download using git.

It should be parent on git possible origins, like github or gitlab.

Table of contents

@@ -385,7 +390,7 @@

Vcp Git

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -393,15 +398,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Dixmit
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -423,5 +428,6 @@

Maintainers

+
From 325af45858d540ac552915ff0ad507a1569ae0fd Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 8 Apr 2026 10:14:50 +0000 Subject: [PATCH 4/7] Added translation using Weblate (Italian) --- vcp_git/i18n/it.po | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 vcp_git/i18n/it.po diff --git a/vcp_git/i18n/it.po b/vcp_git/i18n/it.po new file mode 100644 index 0000000..1c53365 --- /dev/null +++ b/vcp_git/i18n/it.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * vcp_git +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: vcp_git +#: model:ir.model,name:vcp_git.model_vcp_repository_branch +msgid "Links Branches with Repositories" +msgstr "" + +#. module: vcp_git +#: model:ir.model,name:vcp_git.model_vcp_repository +msgid "Repository" +msgstr "" + +#. module: vcp_git +#: model:ir.model,name:vcp_git.model_vcp_platform +msgid "VCP Platform" +msgstr "" From aa75fcf0a3f2642551e9adf1ebbe5278470769a3 Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 8 Apr 2026 10:18:14 +0000 Subject: [PATCH 5/7] Translated using Weblate (Italian) Currently translated at 100.0% (3 of 3 strings) Translation: version-control-platform-18.0/version-control-platform-18.0-vcp_git Translate-URL: https://translation.odoo-community.org/projects/version-control-platform-18-0/version-control-platform-18-0-vcp_git/it/ --- vcp_git/i18n/it.po | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vcp_git/i18n/it.po b/vcp_git/i18n/it.po index 1c53365..c1578ce 100644 --- a/vcp_git/i18n/it.po +++ b/vcp_git/i18n/it.po @@ -6,25 +6,27 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-04-08 12:45+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" #. module: vcp_git #: model:ir.model,name:vcp_git.model_vcp_repository_branch msgid "Links Branches with Repositories" -msgstr "" +msgstr "Collega i branch con i repository" #. module: vcp_git #: model:ir.model,name:vcp_git.model_vcp_repository msgid "Repository" -msgstr "" +msgstr "Repository" #. module: vcp_git #: model:ir.model,name:vcp_git.model_vcp_platform msgid "VCP Platform" -msgstr "" +msgstr "Piattaforma VCP" From 42927b9894efd9ce3322cdcd50a954a212d06ad8 Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Mon, 29 Jun 2026 10:44:18 +0530 Subject: [PATCH 6/7] [MIG] vcp_git: Migration to 19.0 --- requirements.txt | 2 ++ vcp_git/README.rst | 10 +++++----- vcp_git/__manifest__.py | 2 +- vcp_git/static/description/index.html | 6 +++--- 4 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b457f4d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# generated from manifests external_dependencies +GitPython diff --git a/vcp_git/README.rst b/vcp_git/README.rst index a3a513f..8499b1f 100644 --- a/vcp_git/README.rst +++ b/vcp_git/README.rst @@ -21,13 +21,13 @@ Vcp Git :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fversion--control--platform-lightgray.png?logo=github - :target: https://github.com/OCA/version-control-platform/tree/18.0/vcp_git + :target: https://github.com/OCA/version-control-platform/tree/19.0/vcp_git :alt: OCA/version-control-platform .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/version-control-platform-18-0/version-control-platform-18-0-vcp_git + :target: https://translation.odoo-community.org/projects/version-control-platform-19-0/version-control-platform-19-0-vcp_git :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/version-control-platform&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/version-control-platform&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -47,7 +47,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -79,6 +79,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/version-control-platform `_ project on GitHub. +This module is part of the `OCA/version-control-platform `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/vcp_git/__manifest__.py b/vcp_git/__manifest__.py index 73cf209..4e40191 100644 --- a/vcp_git/__manifest__.py +++ b/vcp_git/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Vcp Git", "summary": """Allows to download code from git""", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "license": "AGPL-3", "author": "Dixmit,Odoo Community Association (OCA)", "website": "https://github.com/OCA/version-control-platform", diff --git a/vcp_git/static/description/index.html b/vcp_git/static/description/index.html index 47f97aa..c6af789 100644 --- a/vcp_git/static/description/index.html +++ b/vcp_git/static/description/index.html @@ -374,7 +374,7 @@

Vcp Git

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:1ca94913950dfe5023e3cbc4dfea32bd9c2afba8382c77319676bceda2cb69ae !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/version-control-platform Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/version-control-platform Translate me on Weblate Try me on Runboat

This module adds the necessary code to download using git.

It should be parent on git possible origins, like github or gitlab.

Table of contents

@@ -394,7 +394,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -423,7 +423,7 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/version-control-platform project on GitHub.

+

This module is part of the OCA/version-control-platform project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 392e6044648c0d7674c8c6e84a3fe3e41a54e08b Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Mon, 29 Jun 2026 10:47:10 +0530 Subject: [PATCH 7/7] [DON'T MERGE] test-requirements.txt --- test-requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..26dbef5 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +odoo-addon-vcp_management @ git+https://github.com/OCA/version-control-platform.git@refs/pull/11/head#subdirectory=vcp_management