CleanUpWiki_v14 - itnett/FTD02H-N GitHub Wiki
C:\WikiMigration>git clone https://github.com/itnett/FTD02N.wiki.git C:\WikiMigration\git\wiki_repo Cloning into 'C:\WikiMigration\git\wiki_repo'... remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Compressing objects: 100% (3/3), done. remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) Receiving objects: 100% (6/6), done.
C:\WikiMigration>cd C:\WikiMigration\git\wiki_repo
C:\WikiMigration\git\wiki_repo>dir Volume in drive C is Windows Volume Serial Number is DA48-71B2
Directory of C:\WikiMigration\git\wiki_repo
27.08.2024 10:53
C:\WikiMigration\git\wiki_repo>echo "# Test Page" > TestPage.md
C:\WikiMigration\git\wiki_repo>git add TestPage.md
C:\WikiMigration\git\wiki_repo>git commit -m "Added TestPage.md for verification" [master f00440f] Added TestPage.md for verification 1 file changed, 1 insertion(+) create mode 100644 TestPage.md
C:\WikiMigration\git\wiki_repo>git push origin master Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 16 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 348 bytes | 348.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) To https://github.com/itnett/FTD02N.wiki.git be479df..f00440f master -> master
C:\WikiMigration\git\wiki_repo>
Flott, da fungerer alt som det skal!
La meg justere skriptet slik at det automatisk håndterer:
-
Opprettelse av unike README.md-filer for hvert skript: Hver skriptfil som migreres til
https://github.com/itnett/FTD02N.git
vil få en tilhørende README.md-fil med et unikt navn, slik at de ikke overskrives. -
Publisering av Wiki-sider: Oppdaterte Wiki-sider vil automatisk publiseres til
https://github.com/itnett/FTD02N.wiki.git
, med lenker til relevante skript i koden repoet.
Jeg skal justere og presentere det oppdaterte skriptet slik at du kan kjøre det med full funksjonalitet.
import os
import re
import subprocess
import datetime
import yaml
# 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):
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}")
# 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="main"):
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
# Kjør migreringen
migrate_code_blocks(repo_directory, output_directory)
# Oppdatere URL-er i wiki-repoet
old_base_url = 'https://github.com/itnett/FTD02H-N.wiki.git'
new_base_url = 'https://github.com/itnett/FTD02N/blob/main/' # Juster etter behov
update_wiki_urls(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)
git_operations(repo_directory, commit_message_wiki_repo, remote="origin", branch="master")
# 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"
# Sti til katalogen hvor skriptene fra Wiki-repoen skal lagres
code_repo_directory: "C:\\WikiMigration\\git\\code_repo"
Kjør dette oppdaterte skriptet, og det skal nå håndtere alt vi har diskutert. Det vil opprette unike README.md-filer for hvert skript, oppdatere URL-er i wiki-repoet, og publisere både kode- og wiki-repoet til GitHub.