CleanUpWiki_v10 - itnett/FTD02H-N GitHub Wiki
Ja, vi er enige om følgende prosess:
- 
Kilde for alt innhold:
- Kilde for innholdet er 
https://github.com/itnett/FTD02N/blob/main/. Dette repoet inneholder både kodeblokker og annen dokumentasjon som skal migreres. 
 - Kilde for innholdet er 
 - 
Publisering av kode:
- Kun kodeblokker som finnes i wiki-sidene skal trekkes ut og lagres i 
https://github.com/itnett/FTD02N.git. - Kodefilene skal organiseres i en passende mappestruktur basert på type kode (for eksempel 
Python,Bash,SQL, etc.). - Hver kodefil skal ha en tilhørende 
README.md-fil som inneholder:- Informasjon om hvor koden opprinnelig ble funnet i 
https://github.com/itnett/FTD02N/blob/main/. - Eventuelle relevante lenker tilbake til 
https://github.com/itnett/FTD02N.wiki.gitder denne koden brukes. 
 - Informasjon om hvor koden opprinnelig ble funnet i 
 
 - Kun kodeblokker som finnes i wiki-sidene skal trekkes ut og lagres i 
 - 
Publisering av oppdaterte wiki-sider:
- De oppdaterte wiki-sidene skal publiseres til 
https://github.com/itnett/FTD02N.wiki.git. - Disse sidene skal ha lenker til de kodeblokkene som er flyttet til 
https://github.com/itnett/FTD02N.git, slik at koden blir tilgjengelig i de respektive mapper. - Lenken på wiki-siden skal peke til den spesifikke kodefilen i 
https://github.com/itnett/FTD02N.git(for eksempel via en URL som peker til filen i den relevante underkatalogen i repoet). 
 - De oppdaterte wiki-sidene skal publiseres til 
 - 
Sikre struktur og lesbarhet:
- Kodefilene skal legges i en godt organisert mappestruktur.
 README.md-filene sikrer at det er tydelig dokumentasjon og lett navigasjon til både koden og den opprinnelige konteksten fra wiki-sidene.
 
Med dette oppsettet skal vi oppnå en profesjonell og organisert overføring fra wiki-sidene til separate kodefiler i et dedikert GitHub-repo, samtidig som vi bevarer sammenhengen mellom dokumentasjon og kode gjennom lenker og README-filer. Skriptet jeg har laget skal automatisere denne prosessen. Hvis det er noen justeringer eller ytterligere behov, kan vi gjøre endringer i skriptet for å tilpasse det.
Her er den endelige versjonen av både input.yml og skriptet som håndterer hele prosessen vi har diskutert.
input.yml
# 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.git"
# URL til den nye Wiki-repoen hvor oppdaterte Wiki-sider skal publiseres
wiki_repo_new_url: "https://github.com/itnett/FTD02N.wiki.git"
# Sti til katalogen hvor skriptene fra Wiki-repoen skal lagres
code_repo_directory: "C:\\WikiMigration\\git\\code_repo"
# Sti til katalogen hvor den nye Wiki-repoen skal klones midlertidig
wiki_repo_directory: "C:\\WikiMigration\\git\\wiki_repo"
wiki_code_migration_v06.py
import os
import re
import subprocess
import datetime
import yaml
# Last inn konfigurasjonen fra input.yml
with open('input.yml', 'r') as file:
    config = yaml.safe_load(file)
wiki_repo_url = config['wiki_repo_url']
dump_directory = config['dump_directory']
code_repo_url = config['code_repo_url']
wiki_repo_new_url = config['wiki_repo_new_url']
code_repo_directory = config['code_repo_directory']
wiki_repo_directory = config['wiki_repo_directory']
# Funksjon for å identifisere kjørbar kode i et kjent format
def is_executable_code_block(code_block):
    executable_patterns = [r'^```python', r'^```bash', r'^```sql', r'^```makefile', r'^```shell']
    for pattern in executable_patterns:
        if re.search(pattern, code_block, re.MULTILINE):
            return True
    return False
# Funksjon for å migrere kodeblokker
def migrate_code_blocks(input_dir, output_dir):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    for root, _, files in os.walk(input_dir):
        for file in files:
            if file.endswith('.md'):
                file_path = os.path.join(root, file)
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()
                # Finn alle kodeblokker
                code_blocks = re.findall(r'```.*?```', content, re.DOTALL)
                for block in code_blocks:
                    if is_executable_code_block(block):
                        # Bestem filtype basert på innholdet
                        if '```python' in block:
                            extension = 'py'
                            folder = 'Python'
                        elif '```bash' in block or '```shell' in block:
                            extension = 'sh'
                            folder = 'ShellScripts'
                        elif '```sql' in block:
                            extension = 'sql'
                            folder = 'SQL'
                        elif '```makefile' in block:
                            extension = 'makefile'
                            folder = 'Makefiles'
                        else:
                            continue
                        # Lag mappe hvis den ikke eksisterer
                        output_folder = os.path.join(output_dir, folder)
                        if not os.path.exists(output_folder):
                            os.makedirs(output_folder)
                        output_file_path = os.path.join(output_folder, f"{os.path.splitext(file)[0]}.{extension}")
                        with open(output_file_path, 'w', encoding='utf-8') as code_file:
                            code_file.write(block.strip('`').strip())
                        # Opprett README.md for koden
                        readme_path = os.path.join(output_folder, 'README.md')
                        with open(readme_path, 'w', encoding='utf-8') as readme_file:
                            readme_content = (
                                f"# {file}\n\n"
                                f"**Original Location**: {file_path}\n\n"
                                f"**Link in Wiki**: [{file}](https://github.com/itnett/FTD02N/wiki/{os.path.splitext(file)[0]})\n"
                            )
                            readme_file.write(readme_content)
                        print(f"Kode blokk eksportert til {output_file_path}")
# Funksjon for å oppdatere URL-er i wiki-sidene
def update_wiki_urls(directory, old_base_url, new_base_url):
    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith('.md'):
                file_path = os.path.join(root, file)
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()
                updated_content = re.sub(old_base_url, new_base_url, content)
                with open(file_path, 'w', encoding='utf-8') as f:
                    f.write(updated_content)
                print(f"Oppdatert URL-er i {file_path}")
# Funksjon for å utføre Git-operasjoner
def git_operations(directory, commit_message):
    os.chdir(directory)
    
    # Legg til filer i staging
    subprocess.run(["git", "add", "."])
    
    # Commit med en beskrivelse
    subprocess.run(["git", "commit", "-m", commit_message])
    
    # Oppdaterer (puller) siste endringer
    subprocess.run(["git", "pull", "--rebase"])
    
    # Pusher til remote repository
    subprocess.run(["git", "push", "-u", "origin", "main"])
# Funksjon for å generere en commit-melding med tidsstempel
def generate_commit_message():
    return f"Automatisk oppdatering - {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
# Hovedløp
# Klon den originale Wiki-repoen
if not os.path.exists(dump_directory):
    subprocess.run(["git", "clone", wiki_repo_url, dump_directory])
# Migrer kodeblokker til ny repo
migrate_code_blocks(dump_directory, code_repo_directory)
# Oppdater URL-er i den nye Wiki-repoen
old_base_url = 'https://github.com/itnett/FTD02N/blob/main/'
new_base_url = 'https://github.com/itnett/FTD02N/blob/main/'
update_wiki_urls(dump_directory, old_base_url, new_base_url)
# Git-operasjoner med logging og commit-melding
commit_message_code_repo = generate_commit_message()
commit_message_wiki_repo = generate_commit_message()
git_operations(code_repo_directory, commit_message_code_repo)
git_operations(dump_directory, commit_message_wiki_repo)
Oppsummering av funksjonalitet
- 
input.yml:- Konfigurasjonsfilen definerer alle nødvendige variabler, som URL-er til GitHub-repoene, stier til kataloger for midlertidig lagring, og hvor filene skal plasseres.
 
 - 
Skriptet:
- Kloning av den originale Wiki-repoen: Skriptet kloner 
https://github.com/itnett/FTD02N/blob/main/til en midlertidig katalog. - Migrering av kodeblokker: Alle kodeblokker som er identifisert som kjørbare (f.eks. Python, Bash, SQL) blir eksportert til 
https://github.com/itnett/FTD02N.git, plassert i passende mapper, og enREADME.md-fil genereres for hver kodefil. - Oppdatering av URL-er i wiki-sidene: Lenker i de oppdaterte wiki-sidene på 
https://github.com/itnett/FTD02N.wiki.gitpeker nå til de relevante kodefilene ihttps://github.com/itnett/FTD02N.git. - Automatiserte Git-operasjoner: Alle endringer blir automatisk pushet til de respektive GitHub-repoene med en dynamisk generert commit-melding.
 
 - Kloning av den originale Wiki-repoen: Skriptet kloner 
 
Dette skriptet bør utføre den ønskede migreringen og publiseringen effektivt. Hvis du har ytterligere spørsmål eller ønsker justeringer, er det bare å si fra!