Skip to Content

Vodnik za razvijalce

Vodnik pojasni povezave kode in mesta sprememb. Portal povezuje operativna navodila, komentarji in docstringi pa lokalne pogodbe ter izvedbene odločitve.

Začnite pri lastniški komponenti

Področje Vstopne točke in odgovornost Omejeni dokazi
Nastavitve/katalogi config/, data/repos/: cilji in izbor repozitorijev Register kopij, konfiguracija obnove, katalog posodabljalnika
Proizvodnja kopij scripts/backup/backup_odoo18_dbs.sh, backup_config.bash test_backup_registry.sh, test_backup_locking.sh
Prenos kopij scripts/laptop-backup/: latest, sinhronizacija, spremljanje, namestitev, delegiranje obnove test_backup_locking.sh, test_backup_follow.sh, test_backup_registry.sh
Obnova scripts/restore/restore_database.sh, pet knjižnic lib/ Knjižnice, test_restore_cli_contract.sh, test_restore_safety.sh
Starejša obnova Ciljni ukazi _pmiregistry/scripts/restore/ _pmiregistry/tests/test_restore_local_sources.sh, test_restore_cli.sh v istem repozitoriju
Kopiranje/brisanje baz scripts/duplicate/duplicate_database.sh, scripts/dropdb/deletedb test_duplicate_database.sh, test_deletedb.sh
Ustvarjanje scripts/create/create_database.py test_create_database.py, CLI/dopolnjevanje
Skrbniški dostop scripts/admin/reset_admin_password.py, pomočniki ustvarjanja test_reset_admin_password.py, skupni pomočniki/CLI
Migracija scripts/migrate/, openupgrade_overlays/ Odobreno začasno preverjanje; ni splošne lažne migracijske zbirke
Zbiranje zahtev scripts/fetch/fetch_requirements.py test_fetch_requirements.py
Posodobitve scripts/update/pmirepos_update.py in različicni ukazi test_enhanced_update18_catalog.py za katalog 18
Izvoz prevodov scripts/translate/update_pot_addon.py, update_pot_repo.py Predogled/pregled ukazov; ni posebne zbirke izvoza
Test/lint dodatkov scripts/test/, testkit/ Razporejevalnik, imenski prostor, Ruff, postavitev
Integracija gostitelja scripts/integration/, scripts/completion/ Postavitev in dopolnjevanje
Python tools/python_compatibility.py delegira _pmiguidelines test_python_compatibility.py
Namestitvene predloge templates/, testkit/workflows/, testkit/pre-commit/ Pregled porabnikov in izrisane konfiguracije pred namestitvijo

Razen izrecnih _pmiregistry so testi v ../tests/. Pokrivajo konkretne pogodbe, ne vsake poti vsake vstopne točke. Iz nepovezanega uspeha ne sklepajte o starih posodabljalnikih, migracijah ali prevodih. Za ustvarjanje in skrbniški dostop začnite s skupno izvedbo: lastništvo, prednost konfiguracije, register/transakcije, poverilnice in potrebni testi.

Konfiguracija in ustvarjeni viri

Aktivni /srv/pmiverse/_pmiregistry/config/pmiverse.conf je vključeni Bash, z nadomestitvijo PMIVERSE_CONF. _pmiconfig/config/pmiverse.conf je prazna splošna predloga; config/pmisetup.conf je INI za ConfigParser. Vmesnika sta različna. Register baz poveže vzdevke, imena, različice, relativne vire, cilje in izbirne nadrejene mape kopij. Register instanc doda gostitelja, korene izhoda, povezave in članstvo. Glejte konfiguracijo ter register kopij.

Lokalna zrcala so data/backups/<host>/<database>, oddaljeni proizvajalci pišejo data/backups/<database>, sinhronizacija latest pa splošči arhive v eno mapo in zavrne podvojena osnovna imena. Postavitev ne mešajte pri registrih ali pričakovanjih testov.

data/repos/<version>/*.csv določa imena, URL in ciljne mape izbranega posodabljalnika. OCB lahko pomeni posebno postavitev korena. Preslikave skupin se med splošnim in starejšimi posodabljalniki razlikujejo; pred spremembo preglejte dejanski get_clone_system_dir. Različicne zahteve so vzdrževani namestitveni vhodi. Zbiralnik privzeto ustvarja scripts/fetch/requirements-*.txt; spreminjajte vhode/izvedbo, ne izhodov.

testkit/ je lastnik predlog in politike. Ciljna ogrodja in kopirani delovni tokovi so porabniki. templates/ so namestitveni vhodi: urejanje ne namešča enot, nalaga systemd, posodablja instance ali nadgrajuje. Enote ločijo običajni zagon, vse module, izbrane module, kopije in rsync. Časovnik proži imenovano enoto, ne vseh instanc @.service.

Vmesniki Bash in lastništvo procesov

Operativne vstopne točke navadno uporabljajo strogi način. Knjižnice obnove samo definirajo funkcije brez operacij ali zamenjave pasti klicatelja. Tudi dopolnjevanje je vključena knjižnica, vendar mora prenesti napake brez strogega načina ali končanja interaktivne lupine.

Konfiguracijske knjižnice objavijo imenovane globale; local -n piše v spremenljivke klicatelja. Pripravljalniki dopolnjevanja uporabljajo dinamični obseg Bash za cur, prev, words, cword. Navidez neuporabljena prireditev je lahko meddatotečni vmesnik; preimenovanje ali export zgolj zaradi pregleda ga spremeni.

Izvršljive argumente hranite v poljih. V starejših obnovah sta interpreter in odoo-bin ločena elementa; narekovana razširitev ohrani presledke in glob. Narekovani heredoc ohrani SQL/Python dobesedno; nenarekovani namenoma vstavi lupinske vrednosti. Komentarji heredoc postanejo ustvarjeni program ali izhod in zahtevajo enako skrb kot predloge.

Pasti upravljajo čiščenje procesov. Pred čiščenjem shranite prvotno kodo, ohranite lastništvo začasnih datotek in ne brišite artefaktov brez potrjenega nastanka. Spremljevalnik storitve upravlja svoj journalctl, ne opravila systemd; odklop terminala mora pustiti sinhronizacijo aktivno.

Prehodi stanj kopiranja in obnove

Proizvajalec 18 pred pisanjem razreši cilje, zaklene kanonični koren, ustvari začasni dump/ZIP, preveri ZIP in ga objavi s trdo povezavo na istem datotečnem sistemu, ki zavrne obstoječi cilj. Hramba sledi objavi. Baze uspevajo neodvisno; končni status združi napake in ohrani dokončane arhive.

Latest povezave se objavijo s posameznimi preimenovanji. Sinhronizacija pripravi vse gostitelje, preveri enoličnost imen, nato posamezno zamenja cilje in nazadnje odstrani zastarele. Preimenovanje je atomarno za datoteko, celoten nabor pa ni transakcija; prekinitev lahko pusti mešane generacije.

Splošna obnova loči konfiguracijo, arhive, PostgreSQL, nevtralizacijo in objavo. Vstopna točka upravlja ključavnice, faze, pasti in začasna imena. Povratek opazuje dejansko stanje, saj je ukaz lahko učinkoval pred zapisom zastavice uspeha. Neznano stanje zahteva ohranitev in diagnostiko, ne ugibanja. Pred spremembami preberite arhitekturo obnove.

Starejši ciljni ukazi delijo razreševanje konfiguracije, ohranijo pa lastne destruktivne izvedbe in nimajo vseh jamstev splošnega izvajalnika. Proizvajalec Odoo 12 v _pmiregistry piše končna imena ZIP neposredno in je ločeno dokumentiran.

Podvajanje ob napaki ohrani nepopolne cilje in počisti samo zasebni izvoz. Nov UUID ne nevtralizira kopije. Brisanje najprej izbriše bazo, nato ponovno preveri napravo/inode shrambe; po napaki datotek baze ne more povrniti.

Python in migracijska koda

Zbiralnik izloči izključene mape, razširi lokalne vključitve znotraj korena ter združi normalizirana imena z enakimi okoljskimi označevalci. Upošteva lastništvo skupin; dejansko prednost izhodov opisuje vodnik zbiralnika. Je inventar deklaracij, ne razreševalnik. Razčlenjevanje se konča pred objavo, zamenjava izhodov pa ni skupinsko atomarna.

Splošni posodabljalnik vrača rezultate delavcev in uporablja fast-forward-only. Izboljšane različice uporabljajo običajni pull ter med uvozom inicializirajo konfiguracijo/dnevnik. Starejše zaporedne nimajo nabora delavcev ali ponovitev. Uvoz ni nedejaven način pomoči; testi pred njim preusmerijo konfiguracijo, beleženje in podprocese.

Sinhronizacija Ruff primerja razčlenjeni pomen, ureja pa izvor TOML za ohranitev nepovezanega. Zavrne indeksirane/neindeksirane spremembe ciljne politike, pred pisanjem ponovno razčleni predlog in sporoči konkurenčne vgnezdene konfiguracije brez prepisovanja. Komentarji in oznake kanoničnega vira lahko vplivajo na poznejši izhod.

Izvozniki prevodov uporabljajo deterministične baze l10n_... in pišejo POT v dodatke. Posamezni in repozitorijski ukaz imata različno čiščenje/objavo; glejte izvedbo prevodov.

Migracija klonira zaporedne različice z lastnim okoljem, konfiguracijo in OpenUpgrade. Izpeljane baze in kopije so obnovitveni artefakti, ne transakcija vse-ali-nič. Popravek SQL dopolni manjkajočo vidnost prodajnih priponk ob obstoječem stolpcu. Dopolnitev website-sale pretvori prevedeni HTML trakov in prenese stare metapodatke priponk v dokumente izdelkov. Vstavljanja temeljijo na vrstnem redu migracije; funkcije ne zaganjajte kot samostojnega ponovljivega vzdrževanja.

Infrastruktura testiranja in lint

Izvajalnik enega dodatka pripravi bazo pred pytest. Vtičnik razširi odoo.addons.__path__ namesto vrhnjega sys.path, kjer bi dodatek zasenčil standardno knjižnico. Osnovni pripravljalnik okolja zagotovi kurzor na test in ga povrne; testi ne nameščajo dodatkov.

Repozitorijski izvajalnik odkrije kandidate, uporabi vzorce, razporedi delavce in iz artefaktov izpelje povzetke/značke. Sprotni razporejevalnik vsak PID spremlja in pobere natanko enkrat, tudi zaključene pred čakanjem. Ustavitev ob prvi napaki je v zaporedni veji; vzporedno delo se pred poročanjem dokonča.

Ogrodje ohrani teste brez prisile. Predogled prepreči kopiranje datotek, vendar še ustvari mape dnevnikov/testov. Inicializacija lahko ureja README/ignore in namesti kljuke. Objava značk pred odstranjevanjem primerja članstvo povzetka s ciljnim repozitorijem; odsotnost posameznega SVG ne dokazuje delnega zagona.

Lupinski testi uporabljajo začasna drevesa in lažne ukaze. Nekateri izločijo funkcijo ali blok razporejanja namesto vključitve operativne vstopne točke. Ohranite oznake izločanja, prve lažne ukaze v PATH in posredovanje argumentov za vbrizg napak. run_only_neutralize prejme okoljske nadomestitve posredno prek expect_failure; posredovanje je potrebno, čeprav ga analizator ne najde.

Dokumentacija in pregledi

Dokumentirajte pogodbe vhodov/izhodov, učinke, vrstni red, lastništvo in razloge neobičajne kode. Ne ponavljajte zgolj prireditev ali imen testov. Podrobna navodila ohranite v komponenti in jih povežite s portalom.

Namigi ShellCheck označujejo verzionirane odvisnosti; /dev/null je za izvajalno ustvarjene ali zunanje vire. Ozke oznake ohranijo namerne glob, dobesedne injekcijske podatke, izhode nameref in posredne pasti; pojasnite jih lokalno. Testne opombe opisujejo tudi monkeypatch Python.

Pri dokumentacijskih spremembah sta primerjava z izvorom in pregled sintakse prva koraka. Omejene teste zaženite, če komentarji vplivajo na izločevalne oznake ali ustvarjene predloge. Dejanski backup, migracija, obnova, posodobitev ali namestitev niso nadomestilo teh pregledov.