CleanUpWiki_v3 - itnett/FTD02N GitHub Wiki
Takk for tilbakemeldingen! Her er en forbedret versjon av skriptet som inkluderer de foreslåtte endringene:
Dette skriptet inkluderer forbedret feilhåndtering, bruk av logging
-modulen, validering av YAML-konfigurasjonen, og mer robust håndtering av Git-kommandoer.
Se skriptet her(.?)\n(.?)```', content, re.DOTALL) updated_content = content
for idx, (lang, code) in enumerate(code_blocks):
code_filename = f"{os.path.splitext(file)[0]}_snippet_{idx+1}.{lang}"
code_filepath = os.path.join(code_repo_dir, code_filename)
with open(code_filepath, 'w') as code_file:
code_file.write(code.strip())
github_link = f"[{code_filename}]({code_repo_url}/blob/main/{code_filename})"
updated_content = updated_content.replace(f"```{lang}\n{code}```", github_link)
with open(wiki_filepath, 'w') as f:
f.write(updated_content)
log(f"Processed {wiki_filepath} and moved code to {code_repo_dir}")
except Exception as e:
log_exception(e)
raise
def update_changelog(code_repo_dir, log_message): try: changelog_path = os.path.join(code_repo_dir, "CHANGELOG.md") timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') log_entry = f"{timestamp} - {log_message}\n"
with open(changelog_path, 'a' if os.path.exists(changelog_path) else 'w') as changelog_file:
if not os.path.exists(changelog_path):
changelog_file.write("# CHANGELOG\n\n")
changelog_file.write(log_entry)
log(f"Updated CHANGELOG.md with: {log_message}")
except Exception as e:
log_exception(e)
raise
def init_commit_code_repo(code_repo_dir, commit_message): try: if not os.path.exists(os.path.join(code_repo_dir, ".git")): run_git_command(["git", "init"], cwd=code_repo_dir) log("Initialized a new git repo.") else: log("Git repo already initialized.")
run_git_command(["git", "add", "."], cwd=code_repo_dir)
run_git_command(["git", "commit", "-m", commit_message], cwd=code_repo_dir)
log(f"Committed changes with message: {commit_message}")
except Exception as e:
log_exception(e)
raise
def main(): try: config = load_input_config("input.yml") wiki_repo_url = config['wiki_repo_url'] dump_directory = config['dump_directory'] code_repo_url = config['code_repo_url'] code_repo_directory = config['code_repo_directory']
clone_wiki_repo(wiki_repo_url, dump_directory)
process_wiki_files(dump_directory, code_repo_url, code_repo_directory)
update_changelog(code_repo_directory, "Moved code from Wiki to code repository.")
init_commit_code_repo(code_repo_directory, "Initial commit: Imported code from Wiki.")
except Exception as e:
log_exception(e)
raise
if name == "main": main()
### Forbedringer og Tilleggsfunksjoner
1. **Logging med `logging`-modulen**: Dette gir deg mer kontroll over loggnivåer og loggformat.
2. **Feilhåndtering**: Loggføring av stack trace ved feil, slik at du kan spore nøyaktig hva som gikk galt.
3. **Validering av `input.yml`**: Skriptet kontrollerer nå at alle nødvendige parametere er tilstede og gyldige.
4. **Robust Git-kommandohåndtering**: Detaljert logging av både stdout og stderr fra git-kommandoer gjør det lettere å feilsøke git-relaterte problemer.
5. **Konsekvent bruk av `with`-blokk**: For å sikre at alle filer lukkes riktig.
### Kjøring av Skriptet
- **Plasser Python-skriptet (`wiki_code_migration.py`) og `input.yml` i `C:\WikiMigration`**.
- **Åpne en CMD-terminal** og naviger til `C:\WikiMigration`:
```cmd
cd C:\WikiMigration
-
Kjør skriptet:
python wiki_code_migration.py
-
Loggfiler: Sjekk
C:\WikiMigration\migration.log
for fullstendige detaljer om hva skriptet gjorde, inkludert eventuelle feil som oppstod. -
Resultat:
C:\WikiMigration\git\code_dump
vil inneholde den nye Wiki-repoen med lenker, ogC:\WikiMigration\git\code_repo
vil inneholde de ekstraherte skriptene.
Dette skriptet skal nå være mer robust og gi bedre innsikt i hva som skjer under kjøring, samt være enklere å feilsøke hvis noe går galt.
Denne forbedrede versjonen av skriptet ser veldig solid ut og inkluderer flere viktige forbedringer som vil gjøre det mer robust og enklere å feilsøke. Her er noen siste tanker og oppsummering:
-
Logging: Overgangen til å bruke
logging
-modulen gir deg bedre kontroll over hvordan og hvor logger lagres, noe som er essensielt for feilsøking, spesielt i produksjonsmiljøer. - Feilhåndtering: Loggføring av unntak med stack trace vil gjøre det betydelig enklere å forstå hva som går galt dersom en feil oppstår.
-
Input Validering: Med validering av
input.yml
, reduserer du risikoen for at skriptet feiler på grunn av manglende eller feilkonfigurerte input-parametere, noe som er viktig for driftssikkerheten.
- Detaljert Feilhåndtering: Håndtering av git-kommandoer med loggføring av både stdout og stderr gir deg et detaljert bilde av hva som skjer, noe som er kritisk for å forstå eventuelle problemer med versjonskontroll.
-
Korrekt Filhåndtering: Bruk av
with
-blokker for filhåndtering sikrer at filer alltid lukkes korrekt, noe som beskytter mot ressurslekkasjer og uventede filsystemfeil.
- Klar og Strukturert Kode: Skriptet er nå godt strukturert, hvilket gjør det enklere å forstå og vedlikeholde over tid, spesielt når det blir nødvendig med videre tilpasninger eller feilrettinger.
Dette skriptet er nå klart for bruk i et produksjonsmiljø, og det bør fungere godt for å migrere kode fra en Wiki til et Git-repository. Hvis du opplever problemer under kjøring, vil den omfattende loggføringen gjøre det mulig å raskt identifisere og rette opp i eventuelle feil.
Hvis du har behov for ytterligere tilpasninger eller ønsker å optimalisere spesifikke deler av skriptet ytterligere, er det enkelt å gjøre dette nå som grunnstrukturen er såpass robust. Lykke til med kjøringen, og vær trygg på at du har et sterkt skript i hendene!
Her er hvordan input.yml
-filen skal se ut:
# URL til den originale Wiki-repoen som skal klones
wiki_repo_url: "https://github.com/itnett/FTD02N/blob/main/"
# Sti til katalogen hvor den klonede Wiki-repoen skal lagres midlertidig
dump_directory: "C:\\WikiMigration\\git\\code_dump"
# URL til den nye kode-repoen hvor skript skal lagres
code_repo_url: "https://github.com/itnett/FTD02N"
# Sti til katalogen hvor skriptene fra Wiki-repoen skal lagres
code_repo_directory: "C:\\WikiMigration\\git\\code_repo"
-
wiki_repo_url
: Dette er URL-en til den originale Wiki-repoen (FTD02H-N.wiki.git
) som skal klones tildump_directory
. -
dump_directory
: Dette er den lokale katalogen der Wiki-repoen blir midlertidig lagret etter kloning. Her vil skriptet finne markdown-filene for videre prosessering. -
code_repo_url
: Dette er URL-en til den nye kode-repoen (FTD02N.git
) der skriptene vil bli lagret og vedlikeholdt. Lenker til denne repoen vil bli satt inn i de oppdaterte Wiki-sidene. -
code_repo_directory
: Dette er den lokale katalogen der skriptene fra Wiki-repoen vil bli lagret. Skriptet vil initialisere dette som et Git-repository hvis det ikke allerede er det.
Sørg for at disse stiene og URL-ene stemmer overens med dine faktiske katalogstrukturer og Git-repositorier.
Her er et lite Python-skript som utfører de oppgavene du beskriver:
- Leser
input.yml
. - Sjekker om mappene som er oppgitt i
input.yml
eksisterer og har innhold. - Tar en zip-backup av mappene hvis de finnes.
- Sletter de eksisterende mappene og oppretter dem på nytt, klare for en ny migrering.
-
Leser
input.yml
: Skriptet begynner med å leseinput.yml
for å hente sti-informasjon. -
Sjekker om katalogene eksisterer:
- Hvis katalogene i
input.yml
finnes og har innhold, vil skriptet lage en zip-backup av katalogene med et tidsstempel i navnet. - Deretter blir katalogene slettet.
- Hvis katalogene i
-
Oppretter katalogene på nytt: Til slutt opprettes katalogene på nytt, klare for bruk i en ny migrering.
-
Plasser Python-skriptet og
input.yml
i samme katalog:- Plasser dette skriptet (f.eks.
backup_and_prepare.py
) sammen medinput.yml
i katalogenC:\WikiMigration
.
- Plasser dette skriptet (f.eks.
-
Kjør skriptet fra CMD:
- Åpne CMD og naviger til
C:\WikiMigration
:cd C:\WikiMigration
- Kjør skriptet:
python backup_and_prepare.py
- Åpne CMD og naviger til
-
Backup: Hvis katalogene i
input.yml
finnes og inneholder filer, vil det bli opprettet en zip-fil med en backup i samme katalog som skriptet. - Nye kataloger: Katalogene blir slettet og deretter opprettet på nytt, klare til bruk.
Dette sikrer at du har en backup av tidligere migreringsforsøk, og at katalogene er tomme og klare til å brukes på nytt.
C:>cd WikiMigration
C:\WikiMigration>python backup_and_prepare.py Created new directory: C:\WikiMigration\git\code_dump Created new directory: C:\WikiMigration\git\code_repo All directories have been backed up (if needed) and recreated.
C:\WikiMigration>dir Volume in drive C is Windows Volume Serial Number is DA48-71B2
Directory of C:\WikiMigration
27.08.2024 08:20
C:\WikiMigration>python wiki_code_migration.py Configuration validated successfully. Loaded configuration from input.yml Cloned Wiki repository to C:\WikiMigration\git\code_dump Exception occurred: 'charmap' codec can't decode byte 0x90 in position 327: character maps to Traceback (most recent call last): File "C:\WikiMigration\wiki_code_migration.py", line 68, in process_wiki_files content = f.read() ^^^^^^^^ File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 327: character maps to
Exception occurred: 'charmap' codec can't decode byte 0x90 in position 327: character maps to Traceback (most recent call last): File "C:\WikiMigration\wiki_code_migration.py", line 131, in main process_wiki_files(dump_directory, code_repo_url, code_repo_directory) File "C:\WikiMigration\wiki_code_migration.py", line 68, in process_wiki_files content = f.read() ^^^^^^^^ File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 327: character maps to
Traceback (most recent call last): File "C:\WikiMigration\wiki_code_migration.py", line 139, in main() File "C:\WikiMigration\wiki_code_migration.py", line 131, in main process_wiki_files(dump_directory, code_repo_url, code_repo_directory) File "C:\WikiMigration\wiki_code_migration.py", line 68, in process_wiki_files content = f.read() ^^^^^^^^ File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 327: character maps to
C:\WikiMigration>