CleanUpWiki_v12 - itnett/FTD02H-N GitHub Wiki
Det ser ut som at det har oppstått en feil når skriptet prøvde å pushe endringer til Wiki-repositoriet. Meldingen indikerer at main
-grenen ikke eksisterer i Wiki-repositoriet, og det er sannsynlig at master
er standardgrenen for dette repositoriet. La oss justere skriptet for å bruke riktig gren for Wiki-repoet.
Oppdatert skript for Wiki-repo:
Her er en liten justering i skriptet for å sikre at vi bruker master
-grenen når vi jobber med Wiki-repositoriet:
# Funksjon for å utføre Git-operasjoner
def git_operations(directory, commit_message, 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"])
# Pusher til remote repository
subprocess.run(["git", "push", "-u", "origin", branch])
# Hovedløp
# Git-operasjoner med logging og commit-melding
commit_message_code_repo = generate_commit_message()
commit_message_wiki_repo = generate_commit_message()
# Pusher til 'main'-grenen for code_repo_directory
git_operations(code_repo_directory, commit_message_code_repo, branch='main')
# Pusher til 'master'-grenen for dump_directory (Wiki-repoet)
git_operations(dump_directory, commit_message_wiki_repo, branch='master')
Hva er nytt?
- Branch-parameter: Jeg har lagt til en
branch
-parameter tilgit_operations
-funksjonen som standard er satt tilmain
, men for Wiki-repoet setter vi den tilmaster
. - Bruk av riktig gren: Når vi pusher endringer til
dump_directory
, bruker vi nåmaster
-grenen i stedet formain
.
Hva bør du gjøre videre?
- Oppdatere skriptet: Oppdater skriptet med endringene ovenfor.
- Kjør skriptet igjen: Dette vil forsøke å pushe endringene til
master
-grenen i Wiki-repoet.
Dette burde løse problemet, og alt burde da bli pushet korrekt til GitHub.
Her er den fullstendige oppdaterte versjonen av skriptet som tar hensyn til den grenen som skal brukes for Wiki-repoet:
import os
import re
import subprocess
import datetime
import yaml
# Last inn konfigurasjon fra YAML-fil
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']
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
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
# Opprett mappe hvis den ikke finnes
folder_path = os.path.join(output_dir, folder)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
output_file_path = os.path.join(folder_path, 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())
# Lag en README.md for hver fil
readme_file_path = os.path.join(folder_path, "README.md")
with open(readme_file_path, 'a', encoding='utf-8') as readme_file:
readme_file.write(f"- {os.path.splitext(file)[0]}.{extension} er hentet fra {file_path}\n")
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, 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"])
# Pusher til remote repository
subprocess.run(["git", "push", "-u", "origin", 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
# Klon Wiki-repoet hvis ikke det allerede er klonet
if not os.path.exists(dump_directory):
subprocess.run(["git", "clone", wiki_repo_url, dump_directory])
else:
print("Wiki-repoet er allerede klonet.")
# Migrer kodeblokker fra klonet repo til kode-repo
migrate_code_blocks(dump_directory, code_repo_directory)
# Oppdatere URL-er i wiki-repoet
old_base_url = f'{code_repo_url}/blob/main/'
new_base_url = f'{code_repo_url}/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()
# Pusher til 'main'-grenen for code_repo_directory
git_operations(code_repo_directory, commit_message_code_repo, branch='main')
# Pusher til 'master'-grenen for dump_directory (Wiki-repoet)
git_operations(dump_directory, commit_message_wiki_repo, branch='master')
Sjekklisten for CLI-test:
- Git-kloning: Skriptet sjekker om Wiki-repoet allerede er klonet, hvis ikke kloner det repoet til
dump_directory
. - Kodeblokkmigrering: Migrerer alle relevante kodeblokker fra Wiki-repoet til
code_repo_directory
, og organiserer dem i mapper basert på filtypen. - URL-oppdatering: Oppdaterer alle URL-er i Wiki-repoet slik at de peker til den nye lokasjonen til kodefilene i
code_repo_directory
. - Git-operasjoner: Skriptet håndterer
add
,commit
,pull
, ogpush
for begge repositoriene (kode- og wiki-repoene), og sørger for at endringer pushes til riktig gren.
Testing:
- Kjør skriptet på nytt: Test med den nyeste versjonen, og observer at koden håndterer alt som forventet. Hvis det oppstår feil, kan du vurdere å kjøre skriptet i små biter manuelt for å verifisere hver del.
- Se etter output: Sjekk både GitHub-repoene (
https://github.com/itnett/FTD02N.git
oghttps://github.com/itnett/FTD02N.wiki.git
) for å sikre at alt ser riktig ut etter kjøringen.
La meg vite om du vil fortsette med denne testen, eller om det er andre tilpasninger du trenger før du kjører skriptet.