Garis Panduan Permintaan Tarik
Dokumen ini menyediakan garis panduan komprehensif untuk menyerahkan permintaan tarik kepada projek XOOPS. Mengikuti garis panduan ini memastikan semakan kod yang lancar dan masa penggabungan yang lebih cepat.## Sebelum Membuat Permintaan Tarik### Langkah 1: Semak Isu Sedia Ada
1. Visit the GitHub repository2. Go to Issues tab3. Search for existing issues related to your change4. Check both open and closed issuesLangkah 2: Garpu dan Klon Repositori
Section titled “Langkah 2: Garpu dan Klon Repositori”bash# Fork the repository on GitHub# Click "Fork" button on the repository page
# Clone your forkgit clone https://github.com/YOUR_USERNAME/XOOPS.gitcd XOOPS
# Add upstream remotegit remote add upstream https://github.com/XOOPS/XOOPS.git
# Verify remotesgit remote -v# Should show: origin (your fork) and upstream (official)Langkah 3: Buat Cawangan Ciri
Section titled “Langkah 3: Buat Cawangan Ciri”bash# Update main branchgit fetch upstreamgit checkout maingit merge upstream/main
# Create feature branch# Use descriptive names: bugfix/issue-number or feature/descriptiongit checkout -b bugfix/123-fix-database-connectiongit checkout -b feature/add-psr-7-supportLangkah 4: Buat Perubahan Anda
Section titled “Langkah 4: Buat Perubahan Anda”bash# Make changes to your files# Follow code style guidelines
# Stage changesgit add .
# Commit with clear messagegit commit -m "Fix database connection timeout issue"
# Create multiple commits for logical changesgit commit -m "Add connection retry logic"git commit -m "Improve error messages for debugging"Standard Mesej Komit### Mesej Komit yang BaikGunakan mesej yang jelas dan deskriptif mengikut corak ini:
Section titled “Standard Mesej Komit### Mesej Komit yang BaikGunakan mesej yang jelas dan deskriptif mengikut corak ini:”# Format<type>: <subject>
<body>
<footer>
# Example 1: Bug fixfix: resolve database connection timeout
Add exponential backoff retry mechanism to database connection.Connections now retry up to 3 times with increasing delays.
Fixes #123# Example 2: Featurefeat: implement PSR-7 HTTP message interfaces
Implement Psr\Http\Message interfaces for request/response handling.Provides type-safe HTTP message handling across the framework.
BREAKING CHANGE: Updated RequestHandler signatureKategori Jenis Komit| Taip | Penerangan | Contoh |
Section titled “Kategori Jenis Komit| Taip | Penerangan | Contoh |”|------|-------------|---------|
| feat | Ciri baharu | feat: add user dashboard widget |
| fix | Pembetulan pepijat | fix: resolve cache invalidation bug |
| docs | Dokumentasi | docs: update API reference |
| style | Gaya kod (tiada perubahan logik) | style: format imports |
| refactor | Pemfaktoran semula kod | refactor: simplify service layer |
| perf | Peningkatan prestasi | perf: optimize database queries |
| test | Perubahan ujian | test: add integration tests |
| chore | Build/tooling perubahan | chore: update dependencies |## Perihalan Permintaan Tarik### Templat PR
markdown## DescriptionClear description of changes made and why.
## Type of Change- [ ] Bug fix- [ ] New feature- [ ] Breaking change- [ ] Documentation update
## Related IssuesCloses #123Related to #456
## Changes Made- Change 1- Change 2- Change 3
## Testing- [ ] Tested locally- [ ] All tests pass- [ ] Added new tests- [ ] Manual testing steps included
## Checklist- [ ] Code follows style guidelines- [ ] Self-review completed- [ ] Comments added for complex logic- [ ] Documentation updated- [ ] No new warnings generated- [ ] Added tests for new functionality- [ ] All tests passingKeperluan Kualiti Kod### Gaya KodIkuti garis panduan Gaya Kod:
Section titled “Keperluan Kualiti Kod### Gaya KodIkuti garis panduan Gaya Kod:”php<?php// Good: PSR-12 stylenamespace MyModule\Controller;
use MyModule\Model\Item;use MyModule\Repository\ItemRepository;
class ItemController{ private ItemRepository $repository;
public function __construct(ItemRepository $repository) { $this->repository = $repository; }
public function indexAction() { $items = $this->repository->findAll(); return $this->render('items', ['items' => $items]); }}Keperluan Ujian### Ujian Unit
Section titled “Keperluan Ujian### Ujian Unit”phpnamespace Tests\Feature;
use PHPUnit\Framework\TestCase;use XOOPS\Database\XoopsDatabase;
class DatabaseConnectionTest extends TestCase{ private XoopsDatabase $database;
protected function setUp(): void { $this->database = new XoopsDatabase(); }
public function testConnectionWithValidCredentials() { $result = $this->database->connect(); $this->assertTrue($result); }
public function testConnectionWithInvalidCredentials() { $this->database->setCredentials('invalid', 'invalid'); $result = $this->database->connect(); $this->assertFalse($result); }}Menjalankan Ujian
Section titled “Menjalankan Ujian”bash# Run all testsvendor/bin/phpunit
# Run specific test filevendor/bin/phpunit tests/Feature/DatabaseConnectionTest.php
# Run with coveragevendor/bin/phpunit --coverage-html coverage/Bekerja dengan Cawangan### Pastikan Cawangan Kemas Kini
Section titled “Bekerja dengan Cawangan### Pastikan Cawangan Kemas Kini”bash# Fetch latest from upstreamgit fetch upstream
# Rebase on latest maingit rebase upstream/main
# Or merge if you prefergit merge upstream/main
# Force push if rebased (warning: only on your branch!)git push -f origin bugfix/123-fix-database-connectionMencipta Permintaan Tarik### Format Tajuk PR
Section titled “Mencipta Permintaan Tarik### Format Tajuk PR”[Type] Short description (fix/feature/docs)
Examples:- [FIX] Resolve database connection timeout issue (#123)- [FEATURE] Implement PSR-7 HTTP message interfaces- [DOCS] Update API reference for Criteria classProses Semakan Kod### Perkara Yang Dicari Pengulas1. Ketepatan
Section titled “Proses Semakan Kod### Perkara Yang Dicari Pengulas1. Ketepatan”- Adakah kod menyelesaikan masalah yang dinyatakan?
- Adakah kes tepi dikendalikan?
- Adakah pengendalian ralat sesuai?2. Kualiti
- Adakah ia mengikut piawaian pengekodan?
- Adakah ia boleh dikekalkan?
- Adakah ia diuji dengan baik?3. Prestasi
- Sebarang regresi prestasi?
- Adakah pertanyaan dioptimumkan?
- Adakah penggunaan memori munasabah?4. Keselamatan
- Pengesahan input?
- Pencegahan suntikan SQL?
- Authentication/authorization?### Menjawab Maklum Balas
bash# Address feedback# Edit files based on review comments
# Commit changesgit commit -m "Address code review feedback
- Add additional error handling- Improve test coverage for edge cases- Update documentation"
# Push changesgit push origin bugfix/123-fix-database-connectionIsu dan Penyelesaian PR Biasa### Isu 1: PR Terlalu BesarMasalah: Pengulas tidak boleh menyemak PR besar-besaran dengan berkesanPenyelesaian: Pecah kepada PR yang lebih kecil
Section titled “Isu dan Penyelesaian PR Biasa### Isu 1: PR Terlalu BesarMasalah: Pengulas tidak boleh menyemak PR besar-besaran dengan berkesanPenyelesaian: Pecah kepada PR yang lebih kecil”- PR Pertama: Perubahan teras
- PR Kedua: Ujian
- PR Ketiga: Dokumentasi### Isu 2: Tiada Ujian TermasukMasalah: Pengulas tidak dapat mengesahkan kefungsianPenyelesaian: Tambah ujian komprehensif sebelum menyerahkan### Isu 3: Konflik dengan UtamaMasalah: Cawangan anda tidak segerak dengan utamaPenyelesaian: Asas semula pada utama terkini
bashgit fetch upstreamgit rebase upstream/maingit push -f origin your-branchSelepas Gabung### Pembersihan
Section titled “Selepas Gabung### Pembersihan”bash# Switch to maingit checkout main
# Update maingit pull upstream main
# Delete local branchgit branch -d bugfix/123-fix-database-connection
# Delete remote branchgit push origin --delete bugfix/123-fix-database-connectionRingkasan Amalan Terbaik### Lakukan- Buat mesej komit deskriptif
Section titled “Ringkasan Amalan Terbaik### Lakukan- Buat mesej komit deskriptif”- Buat PR satu tujuan yang fokus
- Sertakan ujian untuk fungsi baharu
- Kemas kini dokumentasi
- Isu berkaitan rujukan
- Pastikan penerangan PR jelas
- Balas ulasan dengan segera### Tidak boleh- Sertakan perubahan yang tidak berkaitan
- Gabung utama ke cawangan anda (gunakan rebase)
- Tolak paksa selepas semakan bermula
- Langkau ujian
- Hantar kerja yang sedang dijalankan
- Abaikan maklum balas semakan kod## Dokumentasi Berkaitan- ../Contributing - Gambaran keseluruhan menyumbang
- Gaya Kod - Garis panduan gaya kod
- ../../03-Module-Development/Best-Practices/Testing - Menguji amalan terbaik
- ../Architecture-Decisions/ADR-Index - Garis panduan seni bina## Sumber- Dokumentasi Git
- Bantuan Permintaan Tarik GitHub
- Komitmen Konvensional
- XOOPS Organisasi GitHub---
Terakhir Dikemaskini: 2026-01-31 Terpakai Kepada: Semua projek XOOPS Repositori: https://github.com/XOOPS/XOOPS