CleanUpWiki_v15 - itnett/FTD02H-N GitHub Wiki

Her er hvordan input.yml-filen skal se ut med de riktige konfigurasjonene for det oppdaterte skriptet:

# URL til den originale Wiki-repoen som skal klones
wiki_repo_url: "https://github.com/itnett/FTD02H-N.wiki.git"

# 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"

# Sti til katalogen hvor skriptene fra Wiki-repoen skal lagres
code_repo_directory: "C:\\WikiMigration\\git\\code_repo"

# URL til den nye Wiki-repoen hvor de oppdaterte wiki-sidene skal lagres
wiki_repo_url: "https://github.com/itnett/FTD02N.wiki.git"

# Sti til katalogen hvor de oppdaterte wiki-sidene skal lagres
wiki_repo_directory: "C:\\WikiMigration\\git\\wiki_repo"

Beskrivelse av feltene:

  • wiki_repo_url: URL-en til det originale Wiki-repoet som inneholder innholdet du skal migrere.
  • dump_directory: Stien til katalogen hvor innholdet fra det originale Wiki-repoet skal dumpes (midlertidig lagringsplass).
  • code_repo_url: URL-en til det nye repoet der kodefiler skal lagres.
  • code_repo_directory: Stien til katalogen hvor de eksporterte skriptene skal lagres før de publiseres til det nye repoet.
  • wiki_repo_directory: Stien til katalogen hvor de oppdaterte wiki-sidene skal lagres (etter at de har blitt modifisert med lenker til skriptene).

Med denne konfigurasjonen vil skriptet vite hvilke repoer som skal brukes og hvor det skal plassere de eksporterte filene.

Du har rett. Den riktige URL-en for oppdatering av wiki-sidene skal være https://github.com/itnett/FTD02N.wiki.git når vi refererer til det nye wiki-repoet. Jeg skal oppdatere skriptet til å bruke den korrekte URL-en.

Her er den endelige versjonen av skriptet med riktig URL:

Oppdatert Skript

import os
import re
import subprocess
import datetime
import yaml
import shutil

# Last inn konfigurasjoner fra input.yml
with open("input.yml", 'r') as stream:
    config = yaml.safe_load(stream)

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']

# 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 og opprette unike README.md-filer
def migrate_code_blocks(input_dir, output_dir, wiki_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 index, block in enumerate(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 = "SQLScripts"
                        elif '```makefile' in block:
                            extension = 'makefile'
                            folder = "Makefiles"
                        else:
                            continue

                        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]}_{index}.{extension}")
                        with open(output_file_path, 'w', encoding='utf-8') as code_file:
                            code_file.write(block.strip('`').strip())

                        # Opprett README.md-fil for hver eksportert kode
                        readme_file_path = os.path.join(output_folder, f"{os.path.splitext(file)[0]}_{index}_README.md")
                        with open(readme_file_path, 'w', encoding='utf-8') as readme_file:
                            readme_file.write(f"# README for {os.path.splitext(file)[0]}_{index}\n")
                            readme_file.write(f"Denne koden ble eksportert fra {file_path}\n")
                            readme_file.write(f"Link til denne koden: {output_file_path}\n")
                        
                        print(f"Kode blokk eksportert til {output_file_path} med README {readme_file_path}")
                        
                        # Oppdater wiki-filen med en lenke til den eksporterte koden
                        code_link = f"https://github.com/itnett/FTD02N/blob/main/{folder}/{os.path.basename(output_file_path)}"
                        updated_block = f"[Se skriptet her]({code_link})"
                        content = content.replace(block, updated_block)

                # Lagre oppdatert innhold i wiki_output_dir
                output_wiki_path = os.path.join(wiki_output_dir, os.path.basename(file_path))
                with open(output_wiki_path, 'w', encoding='utf-8') as f:
                    f.write(content)
                print(f"Oppdatert wiki-fil lagret: {output_wiki_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, remote="origin", branch="master"):
    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", remote, branch])
    
    # Pusher til remote repository
    subprocess.run(["git", "push", remote, branch])

# 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
repo_directory = dump_directory
output_directory = code_repo_directory
wiki_repo_directory = "C:/WikiMigration/git/wiki_repo"

# Kjør migreringen
migrate_code_blocks(repo_directory, output_directory, wiki_repo_directory)

# Oppdatere URL-er i wiki-repoet
old_base_url = 'https://github.com/itnett/FTD02N.wiki.git'
new_base_url = 'https://github.com/itnett/FTD02N/blob/main/'  # Juster etter behov
update_wiki_urls(wiki_repo_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(output_directory, commit_message_code_repo, remote="origin", branch="main")
git_operations(wiki_repo_directory, commit_message_wiki_repo, remote="origin", branch="master")

Oppsummering

  • Oppdatert URL: Den riktige URL-en for wiki-sidene er https://github.com/itnett/FTD02N.wiki.git, og dette er nå korrekt reflektert i skriptet.
  • README-filer: Hver eksporterte kodefil får en unik README.md-fil, og skriptet håndterer også kopiering og oppdatering av wiki-sidene i wiki_repo-katalogen.
  • Publisering: Skriptet sørger for at oppdaterte wiki-sider blir comitet og pushet til https://github.com/itnett/FTD02N.wiki.git.

Prøv å kjøre det oppdaterte skriptet, og sjekk at wiki-sidene blir oppdatert som forventet.