ניהול מאגרים מ scm

אני משתמש אצלי ב bundle עבור vim. זהו מנגנון אשר טוען אוטומטית תוספים עבור vim בתוך ספרייה מיוחדת:

$ $HOME/.vim/bundle/

כל התוספים בהם אני משתמש עבור vim, לקוחים מהמאגרים שלהם מscm כלשהו (בעיקר git), וכל פעם מחדש לעדכן ידנית את הכל זו משימה די מעצבנת.
אז החלטתי לכתוב סקריפט לנושא, והיות ואני לא מת על bash שמסוגל לעשות עבודה טובה כאן, החלטתי לכתוב זאת ברובי:

#!/usr/bin/env ruby
#

def update(dir, type) 
  Dir.chdir(dir)
  puts "Going to update #{dir}"
  system("#{type.to_s} pull")
  Dir.chdir('..')
end

scm = [ :git, :hg ]

Dir['*'].each do |f|
  if File.ftype(f) == 'directory'
     scm.each do |s|
       if Dir[f + "/.#{s.to_s}"][0]
         update(f, s)
         break
       end # if Dir[f + "/.#{s.to_s}"][0]
     end # scm.each do |s|
  end # if File.ftype(f) == 'directory'
end # Dir['*'].each do |f|

puts 'done'

הקוד נכתב ב5 דקות וגם נראה ככה, אבל עובד כמו שצריך.
הוא עובר על כל הקבצים במערכת הספריות הנוכחית, ובודק האם הם ספריה. במידה וכן, הוא נכנס פנימה ובודק האם יש בתוכה ספריית scm כלשהי אשר מוכר לי, ובמידה וכן, הוא נכנס פנימה ומעדכן לפי הscm.
הסקריפט חייב לשבת במיקום תחת bundle בשביל לעבוד (ככה תכננתי אותו).

תהנו.

 

4 מחשבות על “ניהול מאגרים מ scm

  1. פינגבק: My first Go program | לראות שונה

  2. צפריר כהן

    נראה לי יותר פשוט לכתוב את זה בבאש. לחילופין, להשתמש ב־git submodule בשביל לעדכן בפקודה אחת את כל תתי הספריות של גיט (ובהזדמנות: לשמור את התצורה שלך בבקרת תצורה).

    אני מניח שיש למרקוריאל משהו דומה ל־git submodule. אם כן: אפשר להשתמש בו. אין מניעה שאותה תיקיה תשמש גם כמאגר גיט וגם כמאגר מרקוריאל (אבל צריכיל להזהר).

    1. ik_5 מאת

      יכול להיות שגוגל נתן לי תוצות שגויות, אבל מרקוריאל אינו תומך בsub modules, אלא לשים מספר מאגרים באותה ספרייה, ואז הוא מעדכן את כולם (בניגוד לגיט).

      בקשר ל submodules באופן כללי, אני אעבור לזה בקרוב כנראה

  3. צפריר כהן

    במבט ראשון mr נראה כלי די מתאים. אבל נראה לי שאפשר לפשט במעט את הסקריפט בעזרת כמה הנחות ושנוי סדר הסריקה:
    #!/bin/sh

    for type in git hg; do
    for repodir in */.$type; do
    dir=${repodir%/.$type}
    cd $dir
    $type pull
    cd ..
    done
    done

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s