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
    

2. Plasser skriptet og input.yml

  • Opprett Python-skriptet:

    • Åpne Notisblokk (eller en annen teksteditor).
    • Kopier inn Python-koden (som gitt nedenfor) og lagre filen som wiki_code_migration.py i C:\WikiMigration.
  • Opprett input.yml:

    • Lag en fil kalt input.yml i C:\WikiMigration med innholdet som gitt nedenfor.

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:

  1. Publiser den nye Wiki-repoen:

    • C:\WikiMigration\git\code_dump inneholder oppdaterte Wiki-sider med lenker til den nye kode-repoen.
  2. 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 og git\code_repo ved hjelp av CMD-kommandoene som er oppgitt.
  • Lagre Python-skriptet (wiki_code_migration.py) og inputfilen (input.yml) i C:\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.

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. Installer pyyaml 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!