CleanUpWiki_v2 - itnett/FTD02H-N GitHub Wiki
For å kjøre dette skriptet på din Windows PC via CMD (Command Prompt), følg disse trinnene:
1. Sett opp katalogstrukturen
Velg en hovedkatalog hvor du vil plassere skriptet og tilhørende filer. For eksempel, la oss si at du bruker C:\WikiMigration
.
-
Opprett hovedkatalogen:
mkdir C:\WikiMigration cd C:\WikiMigration
-
Opprett undermapper for dump og code_repo:
mkdir C:\WikiMigration\git mkdir C:\WikiMigration\git\code_dump mkdir C:\WikiMigration\git\code_repo
input.yml
2. Plasser skriptet og -
Opprett Python-skriptet:
- Åpne Notisblokk (eller en annen teksteditor).
- Kopier inn Python-koden (som gitt nedenfor) og lagre filen som
wiki_code_migration.py
iC:\WikiMigration
.
-
Opprett
input.yml
:- Lag en fil kalt
input.yml
iC:\WikiMigration
med innholdet som gitt nedenfor.
- Lag en fil kalt
3. Python-kode med logging og feilhåndtering
Her er den oppdaterte Python-koden med logging, feilhåndtering, og ekko til skjermen:
import os
import re
import shutil
import subprocess
import yaml
from datetime import datetime
def load_input_config(file_path):
try:
with open(file_path, 'r') as file:
config = yaml.safe_load(file)
print(f"Loaded configuration from {file_path}")
return config
except Exception as e:
log(f"Error loading configuration: {e}")
raise
def clone_wiki_repo(wiki_repo_url, target_directory):
try:
if os.path.exists(target_directory):
shutil.rmtree(target_directory)
os.makedirs(target_directory)
subprocess.run(["git", "clone", wiki_repo_url, target_directory], check=True)
print(f"Cloned Wiki repository to {target_directory}")
except subprocess.CalledProcessError as e:
log(f"Error cloning repository: {e}")
raise
except Exception as e:
log(f"General error during cloning: {e}")
raise
def process_wiki_files(wiki_dir, code_repo_url, code_repo_dir):
try:
for root, dirs, files in os.walk(wiki_dir):
for file in files:
if file.endswith(".md"):
wiki_filepath = os.path.join(root, file)
with open(wiki_filepath, 'r') as f:
content = f.read()
code_blocks = re.findall(r'```(.*?)\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(f"Error processing wiki files: {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"
if os.path.exists(changelog_path):
with open(changelog_path, 'a') as changelog_file:
changelog_file.write(log_entry)
else:
with open(changelog_path, 'w') as changelog_file:
changelog_file.write("# CHANGELOG\n\n")
changelog_file.write(log_entry)
log(f"Updated CHANGELOG.md with: {log_message}")
except Exception as e:
log(f"Error updating changelog: {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")):
subprocess.run(["git", "init"], cwd=code_repo_dir, check=True)
print("Initialized a new git repo.")
else:
print("Git repo already initialized.")
subprocess.run(["git", "add", "."], cwd=code_repo_dir, check=True)
subprocess.run(["git", "commit", "-m", commit_message], cwd=code_repo_dir, check=True)
print(f"Committed changes with message: {commit_message}")
except subprocess.CalledProcessError as e:
log(f"Error during git operations: {e}")
raise
except Exception as e:
log(f"General error during git commit: {e}")
raise
def log(message):
log_file = os.path.join("C:\\WikiMigration", "migration.log")
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open(log_file, 'a') as log_f:
log_f.write(f"{timestamp} - {message}\n")
print(message)
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(f"Script failed with error: {e}")
if __name__ == "__main__":
main()
input.yml
-filen
Opprett en fil input.yml
i C:\WikiMigration
med følgende innhold:
wiki_repo_url: "https://github.com/itnett/FTD02N/blob/main/"
dump_directory: "C:\\WikiMigration\\git\\code_dump"
code_repo_url: "https://github.com/itnett/FTD02N"
code_repo_directory: "C:\\WikiMigration\\git\\code_repo"
4. Kjør skriptet
Åpne CMD (Command Prompt) og naviger til C:\WikiMigration
:
cd C:\WikiMigration
Deretter kjører du Python-skriptet:
python wiki_code_migration.py
Resultater:
- Skjermutskrift: Skriptet vil skrive ut meldinger til skjermen (via
print
) som informerer deg om hva som skjer. - Logging: Alle handlinger og eventuelle feil vil bli logget til
C:\WikiMigration\migration.log
. - Feilhåndtering: Skriptet inkluderer omfattende feilhåndtering som logger eventuelle feil og gir informative meldinger, både til loggfilen og til skjermen.
Etter at skriptet er ferdig
Når skriptet har kjørt:
-
Publiser den nye Wiki-repoen:
C:\WikiMigration\git\code_dump
inneholder oppdaterte Wiki-sider med lenker til den nye kode-repoen.
-
Publiser kode-repoen:
C:\WikiMigration\git\code_repo
inneholder alle skript som er ekstrahert fra Wiki-en og kan publiseres som et eget Git-repository.
Dette oppsettet gir deg en robust prosess for å migrere kode fra en Wiki til et eget Git-repo, samtidig som det sikrer at du har full oversikt over hva som skjer underveis.
Klar til kjøring på Windows med CMD!
Her er en oversikt over instruksjonene, og hvordan du kan komme i gang:
1. Oppsett
- Velg en katalog (for eksempel
C:\WikiMigration
) for å lagre skriptet, inputfilen og de resulterende repoene. - Opprett denne katalogen og undermappene
git\code_dump
oggit\code_repo
ved hjelp av CMD-kommandoene som er oppgitt. - Lagre Python-skriptet (
wiki_code_migration.py
) og inputfilen (input.yml
) iC:\WikiMigration
.
2. Python-kode
- Den forbedrede koden inkluderer nå:
- Logging: Skriver hendelser og feil til en loggfil (
migration.log
) for senere gjennomgang. - Feilhåndtering: Fanger opp feil, logger dem, og gir informative meldinger for å hjelpe med feilsøking.
- Skjermutskrift: Bruker
print
for å gi tilbakemeldinger under kjøring.
- Logging: Skriver hendelser og feil til en loggfil (
3. input.yml
- Sørg for at URL-ene i
input.yml
er riktige for dine Wiki- og kode-repositorier. code_repo_url
bør peke på hovedsiden til kode-repoet ditt på GitHub, ikke til en spesifikk mappe eller fil.
4. Kjør skriptet
- Åpne CMD og naviger til
C:\WikiMigration
. - Kjør
python wiki_code_migration.py
. - Følg med på skjermutskrift og loggfil for å overvåke fremdriften og eventuelle problemer.
5. Etter kjøring
- Du vil finne de oppdaterte Wiki-sidene (med lenker til koden) i
C:\WikiMigration\git\code_dump
. - Kode-repoet er klart i
C:\WikiMigration\git\code_repo
, og kan publiseres til GitHub manuelt eller via Git-kommandoer i CMD.
Viktige punkter:
- Git: Sørg for at Git er installert og tilgjengelig i CMD.
- Python: Sjekk at du har Python installert og at
pip
fungerer. Installerpyyaml
om nødvendig:pip install pyyaml
. - Feil: Hvis du får feil, sjekk loggfilen (
C:\WikiMigration\migration.log
) for detaljer. - Tilpasning: Endre GitHub-URL-er og filnavn etter behov.
Med denne detaljerte veiledningen og den forbedrede koden, bør du være klar til å kjøre skriptet på din Windows-maskin og migrere Wiki-koden til et dedikert Git-repository!