CleanUpWiki - itnett/FTD02H-N GitHub Wiki
Ja, jeg ser forskjellen mellom de to repoene. Du ønsker å flytte koden fra den opprinnelige Wiki-repoen (FTD02H-N.wiki.git) til en ny ren kode-repo (FTD02N.git) og samtidig opprette en ny Wiki-repo (FTD02N.wiki.git) som kun inneholder lenker til den nye kode-repoen.
Justert Skript for Din Oppgave
Her er hvordan vi kan justere skriptet og prosessen for å passe til denne strukturen:
- Klone den opprinnelige Wiki-repoen (
FTD02H-N.wiki.git) til en lokaldump_directory. - Ekstrahere og flytte kode fra den opprinnelige Wiki-repoen til den nye kode-repoen (
FTD02N.git). - Oppdatere Wiki-sidene i 
dump_directorymed lenker til skriptene i den nye kode-repoen. - Publisere det oppdaterte innholdet i 
dump_directorysom den nye Wiki-repoen (FTD02N.wiki.git). 
Oppdatert Python-skript
Her er det oppdaterte Python-skriptet:
import os
import re
import shutil
import subprocess
import yaml
from datetime import datetime
# Funksjon for å lese inputfilen
def load_input_config(file_path):
    with open(file_path, 'r') as file:
        config = yaml.safe_load(file)
    return config
# Funksjon for å klone Wiki-repoet
def clone_wiki_repo(wiki_repo_url, target_directory):
    if os.path.exists(target_directory):
        shutil.rmtree(target_directory)
    os.makedirs(target_directory)
    subprocess.run(["git", "clone", wiki_repo_url, target_directory])
    print(f"Cloned Wiki repository to {target_directory}")
# Funksjon for å ekstrahere kodeblokker og erstatte med lenker
def process_wiki_files(wiki_dir, code_repo_url, code_repo_dir):
    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()
                # Finn og ekstraher kodeblokker
                code_blocks = re.findall(r'```(.*?)\n(.*?)```', content, re.DOTALL)
                updated_content = content
                for idx, (lang, code) in enumerate(code_blocks):
                    # Generer filnavn for koden
                    code_filename = f"{os.path.splitext(file)[0]}_snippet_{idx+1}.{lang}"
                    code_filepath = os.path.join(code_repo_dir, code_filename)
                    # Lagre koden i kode-repo
                    with open(code_filepath, 'w') as code_file:
                        code_file.write(code.strip())
                    # Erstatt kodeblokken med en lenke i Wiki-filen
                    github_link = f"[{code_filename}]({code_repo_url}/blob/main/{code_filename})"
                    updated_content = updated_content.replace(f"```{lang}\n{code}```", github_link)
                # Skriv oppdatert Wiki-fil tilbake
                with open(wiki_filepath, 'w') as f:
                    f.write(updated_content)
                print(f"Processed {wiki_filepath} and moved code to {code_repo_dir}")
# Funksjon for å oppdatere CHANGELOG.md
def update_changelog(code_repo_dir, log_message):
    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)
    print(f"Updated CHANGELOG.md with: {log_message}")
# Funksjon for å initialisere git repo og gjøre commits
def init_commit_code_repo(code_repo_dir, commit_message):
    if not os.path.exists(os.path.join(code_repo_dir, ".git")):
        subprocess.run(["git", "init"], cwd=code_repo_dir)
        print("Initialized a new git repo.")
    else:
        print("Git repo already initialized.")
    subprocess.run(["git", "add", "."], cwd=code_repo_dir)
    subprocess.run(["git", "commit", "-m", commit_message], cwd=code_repo_dir)
    print(f"Committed changes with message: {commit_message}")
# Hovedprogrammet
def main():
    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']
    # Klon Wiki-repo
    clone_wiki_repo(wiki_repo_url, dump_directory)
    # Prosesser Wiki-filer og flytt kode til kode-repo
    process_wiki_files(dump_directory, code_repo_url, code_repo_directory)
    # Oppdater CHANGELOG.md
    update_changelog(code_repo_directory, "Moved code from Wiki to code repository.")
    # Initialiser og commit kode-repo
    init_commit_code_repo(code_repo_directory, "Initial commit: Imported code from Wiki.")
if __name__ == "__main__":
    main()
input.yml-filen
Oppdater input.yml-filen til å inkludere den nye Wiki-repoen og kode-repoen:
wiki_repo_url: "https://github.com/itnett/FTD02N/blob/main/"
dump_directory: "./git/code_dump"
code_repo_url: "https://github.com/itnett/FTD02N"
code_repo_directory: "./git/code_repo"
Slik fungerer det:
- 
Klone den originale Wiki-repoen:
- Skriptet kloner 
FTD02H-N.wiki.gittil./git/code_dump. 
 - Skriptet kloner 
 - 
Ekstrahere og lagre kode:
- Skriptet ekstraherer kodeblokker fra Wiki-sidene i 
./git/code_dumpog lagrer dem som separate filer i./git/code_repo. 
 - Skriptet ekstraherer kodeblokker fra Wiki-sidene i 
 - 
Oppdatere lenker i Wiki-sidene:
- I hver Wiki-side i 
./git/code_dumpblir kodeblokker erstattet med lenker til skriptene iFTD02Nkode-repoen på GitHub (https://github.com/itnett/FTD02N). 
 - I hver Wiki-side i 
 - 
Publisere ny Wiki-repo:
- Etter at skriptet er kjørt, vil 
./git/code_dumpinneholde de oppdaterte Wiki-sidene. Du kan deretter initialisere dette som en ny Wiki-repo (FTD02N.wiki.git) og pushe endringene. 
 - Etter at skriptet er kjørt, vil 
 
Publisere den nye Wiki-repoen
- 
Naviger til
dump_directory(./git/code_dump):cd ./git/code_dump - 
Initialiser Git-repo og legg til remote:
git init git remote add origin https://github.com/itnett/FTD02N.wiki.git - 
Commit og push endringene:
git add . git commit -m "Migrated Wiki to link to new code repository" git push -u origin main 
Publisere kode-repoen
- 
Naviger til
code_repo_directory(./git/code_repo):cd ./git/code_repo - 
Initialiser Git-repo og legg til remote:
git init git remote add origin https://github.com/itnett/FTD02N.git - 
Commit og push endringene:
git add . git commit -m "Initial import of code from Wiki" git push -u origin main 
Resultat:
- FTD02H-N.wiki.git: Den opprinnelige Wiki-repoen er uberørt.
 - FTD02N.wiki.git: Den nye Wiki-repoen inneholder oppdaterte sider med lenker til skript i kode-repoen.
 - FTD02N.git: Kode-repoen inneholder alle skriptene som ble ekstrahert fra den opprinnelige Wiki-en.
 
Denne tilnærmingen holder koden og dokumentasjonen tydelig adskilt, og gjør det enkelt å vedlikeholde begge deler uavhengig av hverandre.