From: Carl Sorensen Date: Sat, 26 Dec 2009 23:51:51 +0000 (-0700) Subject: lilycontrib.tcl -- version 0.59 X-Git-Tag: release/2.13.10-1~59 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=0c1934fd9a9ee2552eba6562758e09e41220d109;p=lilypond.git lilycontrib.tcl -- version 0.59 Make translation repo have full history Rename to lily-git.tcl --- diff --git a/scripts/auxiliar/lily-git.tcl b/scripts/auxiliar/lily-git.tcl new file mode 100755 index 0000000000..02f1040caf --- /dev/null +++ b/scripts/auxiliar/lily-git.tcl @@ -0,0 +1,349 @@ +#!/usr/bin/wish + +# GUI interface for common LilyPond git repository commands +# Copyright 2009 by Johannes Schindelin and Carl Sorensen +# + +set version 0.59 + +# set to 1 to set up for translation, to 0 for other +set translator 0 + +if {$translator == 1} { + set windowTitle \ + "LilyPond Translator's Git Interface version $version" + set updateButtonText "1. Update translation" + set initializeButtonText "1. Get translation" + set originHead "lilypond/translation" + set rebase 0 +} else { + set windowTitle \ + "LilyPond Contributor's Git Interface version $version" + set updateButtonText "1. Update source" + set initializeButtonText "1. Get source" + set originHead "master" + set rebase 1 +} +package require Tk + +# Helper functions + +set lily_dir $env(HOME)/lilypond +if {[file exists $lily_dir]} { + cd $lily_dir +} + +set abort_dir "./aborted_edits" + +proc write_to_output {s} { + .output.text insert insert $s + .output.text see end +} + +proc write_file_to_output {f} { + if {[eof $f]} { + global git_command + fconfigure $f -blocking true + if {[catch {close $f} err]} { + tk_messageBox -type ok -message \ + "Command returned an error: $err\n\nCheck output text for details" + } + unset git_command + } else { + write_to_output [read $f 24] + } +} + +proc git {args} { + global lily_dir git_command + set git_command [linsert $args 0 "|git" "--git-dir=$lily_dir/.git"] + set git_command "$git_command 2>@1" + .output.text insert end "$git_command\n" + set git [open $git_command r] + fconfigure $git -blocking false + fileevent $git readable [list write_file_to_output $git] + vwait git_command +} + +proc config {args} { + global lily_dir + set p [open [linsert $args 0 "|git" --git-dir=$lily_dir/.git config] r] + set result [regsub "\n\$" [read $p] ""] + if {[catch {close $p} err]} { + tk_messageBox -type ok -message "config failed: $err" + } + return $result +} + +proc config_quiet {args} { + global lily_dir + set p [open [linsert $args 0 "|git" --git-dir=$lily_dir/.git config] r] + set result [regsub "\n\$" [read $p] ""] + if {[catch {close $p} err]} { + set result "" + } + return $result +} + +proc update_lilypond_rebase {} { + update_lilypond 1 +} + +proc commit {} { + global commit_message + global commit_canceled + set commit_canceled 0 + get_commit_message + tkwait visibility .commitMessage + tkwait window .commitMessage + if {$commit_canceled != 1} { + if {$commit_message == ""} { + tk_messageBox -message "You must enter a commit message!" \ + -type ok -icon error + } else { + git commit -a -m $commit_message + git rebase --whitespace=fix HEAD^ + set commit_message "" + } + } +} + +# This won't work, because --amend needs an editor +# lilyconfig users are on their own. +proc commit_amend {} { + git commit -a --amend + git rebase --whitespace=fix HEAD^ +} + +proc update_lilypond_norebase {} { + update_lilypond 0 +} + +proc update_lilypond_with_rebase {} { + global rebase + update_lilypond $rebase +} + +proc update_lilypond {rebase} { + global lily_dir + global originHead + global translator + . config -cursor watch + if {![file exists $lily_dir]} { + write_to_output "Cloning LilyPond (this can take some time) ...\n" + file mkdir $lily_dir + cd $lily_dir + git init + git config core.bare false + git remote add -t $originHead \ + origin git://git.sv.gnu.org/lilypond.git + if {$translator == 1} { + git fetch + } else { + git fetch --depth 1 + } + git reset --hard origin/$originHead + git config branch.$originHead.remote origin + git config branch.$originHead.merge refs/heads/$originHead + .buttons.commit configure -state normal + .buttons.update configure -text buttonUpdateText + .buttons.patch configure -state normal + .buttons.panic configure -state normal + toggle_rebase + } else { + write_to_output "Updating LilyPond...\n" + git fetch origin + if {$rebase} { + git rebase origin/$originHead + } else { + git merge origin/$originHead + } + } + write_to_output "Done.\n" + . config -cursor "" +} + +proc patch_from_origin {} { + global rebase + make_patch_from_origin $rebase + if {![llength [glob -nocomplain 0*.patch]]} { + tk_messageBox -type ok -message \ + "No patches created; did you make a local commit?" + } +} + +proc make_patch_from_origin {rebase} { + global lily_dir + global originHead + . config -cursor watch + update_lilypond $rebase + write_to_output "Creating patch...\n" + git format-patch origin/$originHead + write_to_output "Done.\n" + . config -cursor "" +} + +proc abort_changes {} { + global abort_dir + global originHead + set answer [tk_messageBox -type okcancel \ + -message "This will copy all changed files to $abort_dir and reset the repository." \ + -default cancel] + switch -- $answer { + ok { + write_to_output "abort_dir: $abort_dir \n" + if {![file exists $abort_dir]} { + set return_code [exec mkdir $abort_dir] + } + set return_code [catch {exec git diff origin/$originHead} gitdiff] + set return_code [regexp {diff --git a/(\S*)} $gitdiff match modified_file] + while {$return_code != 0} { + write_to_output "Copying $modified_file to $abort_dir.\n" + set return_code [catch {exec cp $modified_file $abort_dir} result] + set return_code [regsub {diff --git a/(\S*)} $gitdiff "" gitdiff] + set return_code [regexp {diff --git a/(\S*)} $gitdiff match modified_file] + } + set return_code [git reset --hard origin/$originHead] + write_to_output "Repository reset. \n" + } + } +} + +proc toggle_rebase {} { + global rebase + global lily_dir + global originHead + global updateButtonText + global initializeButtonText + if {[file exists $lily_dir]} { + config --bool branch.$originHead.rebase $rebase + .buttons.update configure -text $updateButtonText + } else { + .buttons.update configure -text $initializeButtonText + } +} + +proc clear_rebase {} { + global rebase + set rebase 0 + toggle_rebase +} + +proc set_rebase {} { + global rebase + set rebase 1 + toggle_rebase +} + +proc commitMessageOK {} { + global commit_message + global commit_header + set commit_body [.commitMessage.bottomFrame.commit_body get 1.0 end] + set commit_message "$commit_header\n\n$commit_body" + destroy .commitMessage +} + +proc commitMessageCancel {} { + global commit_message + global commit_canceled + set commit_message "" + set commit_canceled 1 + destroy .commitMessage +} + + +# Commit message input window +proc get_commit_message {} { + global commit_header + set commit_header "" + toplevel .commitMessage + frame .commitMessage.topFrame + label .commitMessage.topFrame.label \ + -text "Enter commit message header:\n(50 chars max = width of box)" + entry .commitMessage.topFrame.commit_header \ + -width 50 -relief solid -border 2 -textvariable commit_header + pack .commitMessage.topFrame.label -side left + pack .commitMessage.topFrame.commit_header -side left + + frame .commitMessage.bottomFrame + text .commitMessage.bottomFrame.commit_body \ + -width 75 -height 10 -relief solid -border 2 -wrap none + + frame .commitMessage.bottomFrame.leftFrame + label .commitMessage.bottomFrame.leftFrame.label \ + -text "Enter commit message body:\n(No limit -- Full description)" + button .commitMessage.bottomFrame.leftFrame.ok \ + -text OK -default active -command commitMessageOK + button .commitMessage.bottomFrame.leftFrame.cancel -text Cancel -default active \ + -command commitMessageCancel + wm withdraw .commitMessage + wm title .commitMessage "Git Commit Message" + + pack .commitMessage.bottomFrame.leftFrame.label + pack .commitMessage.bottomFrame.leftFrame.ok + pack .commitMessage.bottomFrame.leftFrame.cancel + + pack .commitMessage.bottomFrame.leftFrame -side left + pack .commitMessage.bottomFrame.commit_body -side left + + pack .commitMessage.topFrame + pack .commitMessage.bottomFrame + + wm transient .commitMessage . + wm deiconify .commitMessage +} + + +# GUI + +wm title . $windowTitle + +# Buttons + +panedwindow .buttons +button .buttons.commit -text "2. Make local commit" -command commit +button .buttons.update -text $updateButtonText \ + -command update_lilypond_with_rebase +toggle_rebase +button .buttons.patch -text "3. Make patch set" \ + -command patch_from_origin +button .buttons.panic -text "Abort changes -- Reset to origin" \ + -command abort_changes -fg Blue -bg Red +label .buttons.spacer -text " " +if {![file exists $lily_dir]} { + .buttons.update configure \ + -text $initializeButtonText + .buttons.commit configure -state disabled + .buttons.patch configure -state disabled + .buttons.panic configure -state disabled +} + +# Operating buttons + +pack .buttons.update -side left +pack .buttons.commit -side left +pack .buttons.patch -side left +pack .buttons.spacer -side left +pack .buttons.panic -side left + + +# Output text box + +panedwindow .output +label .output.label -text "Command output:" +text .output.text -width 80 -height 15 \ + -xscrollcommand [list .output.horizontal set] \ + -yscrollcommand [list .output.vertical set] \ + -relief solid -border 2 +scrollbar .output.horizontal -orient h -command [list .output.text xview] +scrollbar .output.vertical -orient v -command [list .output.text yview] +pack .output.label -side left +pack .output.horizontal -side bottom -fill x +pack .output.vertical -side right -fill y +pack .output.text -expand true -anchor nw -fill both + +pack .buttons +pack .output + +#grid .buttons -row 2 -column 1 +#grid .output -row 3 -column 1 -sticky "w" diff --git a/scripts/auxiliar/lilycontrib.tcl b/scripts/auxiliar/lilycontrib.tcl deleted file mode 100755 index d36548987b..0000000000 --- a/scripts/auxiliar/lilycontrib.tcl +++ /dev/null @@ -1,345 +0,0 @@ -#!/usr/bin/wish - -# GUI interface for common LilyPond git repository commands -# Copyright 2009 by Johannes Schindelin and Carl Sorensen -# - -set version 0.58 - -# set to 1 to set up for translation, to 0 for other -set translator 0 - -if {$translator == 1} { - set windowTitle \ - "LilyPond Translator's Git Interface version $version" - set updateButtonText "1. Update translation" - set initializeButtonText "1. Get translation" - set originHead "lilypond/translation" - set rebase 0 -} else { - set windowTitle \ - "LilyPond Contributor's Git Interface version $version" - set updateButtonText "1. Update source" - set initializeButtonText "1. Get source" - set originHead "master" - set rebase 1 -} - -package require Tk - -# Helper functions - -set lily_dir $env(HOME)/lilypond -if {[file exists $lily_dir]} { - cd $lily_dir -} - -set abort_dir "./aborted_edits" - -proc write_to_output {s} { - .output.text insert insert $s - .output.text see end -} - -proc write_file_to_output {f} { - if {[eof $f]} { - global git_command - fconfigure $f -blocking true - if {[catch {close $f} err]} { - tk_messageBox -type ok -message \ - "Command returned an error: $err\n\nCheck output text for details" - } - unset git_command - } else { - write_to_output [read $f 24] - } -} - -proc git {args} { - global lily_dir git_command - set git_command [linsert $args 0 "|git" "--git-dir=$lily_dir/.git"] - set git_command "$git_command 2>@1" - .output.text insert end "$git_command\n" - set git [open $git_command r] - fconfigure $git -blocking false - fileevent $git readable [list write_file_to_output $git] - vwait git_command -} - -proc config {args} { - global lily_dir - set p [open [linsert $args 0 "|git" --git-dir=$lily_dir/.git config] r] - set result [regsub "\n\$" [read $p] ""] - if {[catch {close $p} err]} { - tk_messageBox -type ok -message "config failed: $err" - } - return $result -} - -proc config_quiet {args} { - global lily_dir - set p [open [linsert $args 0 "|git" --git-dir=$lily_dir/.git config] r] - set result [regsub "\n\$" [read $p] ""] - if {[catch {close $p} err]} { - set result "" - } - return $result -} - -proc update_lilypond_rebase {} { - update_lilypond 1 -} - -proc commit {} { - global commit_message - global commit_canceled - set commit_canceled 0 - get_commit_message - tkwait visibility .commitMessage - tkwait window .commitMessage - if {$commit_canceled != 1} { - if {$commit_message == ""} { - tk_messageBox -message "You must enter a commit message!" \ - -type ok -icon error - } else { - git commit -a -m $commit_message - git rebase --whitespace=fix HEAD^ - set commit_message "" - } - } -} - -# This won't work, because --amend needs an editor -# lilyconfig users are on their own. -proc commit_amend {} { - git commit -a --amend - git rebase --whitespace=fix HEAD^ -} - -proc update_lilypond_norebase {} { - update_lilypond 0 -} - -proc update_lilypond_with_rebase {} { - global rebase - update_lilypond $rebase -} - -proc update_lilypond {rebase} { - global lily_dir - global originHead - . config -cursor watch - if {![file exists $lily_dir]} { - write_to_output "Cloning LilyPond (this can take some time) ...\n" - file mkdir $lily_dir - cd $lily_dir - git init - git config core.bare false - git remote add -t $originHead \ - origin git://git.sv.gnu.org/lilypond.git - git fetch --depth 1 - git reset --hard origin/$originHead - git config branch.$originHead.remote origin - git config branch.$originHead.merge refs/heads/$originHead - .buttons.commit configure -state normal - .buttons.update configure -text buttonUpdateText - .buttons.patch configure -state normal - .buttons.panic configure -state normal - toggle_rebase - } else { - write_to_output "Updating LilyPond...\n" - git fetch origin - if {$rebase} { - git rebase origin/$originHead - } else { - git merge origin/$originHead - } - } - write_to_output "Done.\n" - . config -cursor "" -} - -proc patch_from_origin {} { - global rebase - make_patch_from_origin $rebase - if {![llength [glob -nocomplain 0*.patch]]} { - tk_messageBox -type ok -message \ - "No patches created; did you make a local commit?" - } -} - -proc make_patch_from_origin {rebase} { - global lily_dir - global originHead - . config -cursor watch - update_lilypond $rebase - write_to_output "Creating patch...\n" - git format-patch origin/$originHead - write_to_output "Done.\n" - . config -cursor "" -} - -proc abort_changes {} { - global abort_dir - global originHead - set answer [tk_messageBox -type okcancel \ - -message "This will copy all changed files to $abort_dir and reset the repository." \ - -default cancel] - switch -- $answer { - ok { - write_to_output "abort_dir: $abort_dir \n" - if {![file exists $abort_dir]} { - set return_code [exec mkdir $abort_dir] - } - set return_code [catch {exec git diff origin/$originHead} gitdiff] - set return_code [regexp {diff --git a/(\S*)} $gitdiff match modified_file] - while {$return_code != 0} { - write_to_output "Copying $modified_file to $abort_dir.\n" - set return_code [catch {exec cp $modified_file $abort_dir} result] - set return_code [regsub {diff --git a/(\S*)} $gitdiff "" gitdiff] - set return_code [regexp {diff --git a/(\S*)} $gitdiff match modified_file] - } - set return_code [git reset --hard origin/$originHead] - write_to_output "Repository reset. \n" - } - } -} - -proc toggle_rebase {} { - global rebase - global lily_dir - global originHead - global updateButtonText - global initializeButtonText - if {[file exists $lily_dir]} { - config --bool branch.$originHead.rebase $rebase - .buttons.update configure -text $updateButtonText - } else { - .buttons.update configure -text $initializeButtonText - } -} - -proc clear_rebase {} { - global rebase - set rebase 0 - toggle_rebase -} - -proc set_rebase {} { - global rebase - set rebase 1 - toggle_rebase -} - -proc commitMessageOK {} { - global commit_message - global commit_header - set commit_body [.commitMessage.bottomFrame.commit_body get 1.0 end] - set commit_message "$commit_header\n\n$commit_body" - destroy .commitMessage -} - -proc commitMessageCancel {} { - global commit_message - global commit_canceled - set commit_message "" - set commit_canceled 1 - destroy .commitMessage -} - - -# Commit message input window -proc get_commit_message {} { - global commit_header - set commit_header "" - toplevel .commitMessage - frame .commitMessage.topFrame - label .commitMessage.topFrame.label \ - -text "Enter commit message header:\n(50 chars max = width of box)" - entry .commitMessage.topFrame.commit_header \ - -width 50 -relief solid -border 2 -textvariable commit_header - pack .commitMessage.topFrame.label -side left - pack .commitMessage.topFrame.commit_header -side left - - frame .commitMessage.bottomFrame - text .commitMessage.bottomFrame.commit_body \ - -width 75 -height 10 -relief solid -border 2 -wrap none - - frame .commitMessage.bottomFrame.leftFrame - label .commitMessage.bottomFrame.leftFrame.label \ - -text "Enter commit message body:\n(No limit -- Full description)" - button .commitMessage.bottomFrame.leftFrame.ok \ - -text OK -default active -command commitMessageOK - button .commitMessage.bottomFrame.leftFrame.cancel -text Cancel -default active \ - -command commitMessageCancel - wm withdraw .commitMessage - wm title .commitMessage "Git Commit Message" - - pack .commitMessage.bottomFrame.leftFrame.label - pack .commitMessage.bottomFrame.leftFrame.ok - pack .commitMessage.bottomFrame.leftFrame.cancel - - pack .commitMessage.bottomFrame.leftFrame -side left - pack .commitMessage.bottomFrame.commit_body -side left - - pack .commitMessage.topFrame - pack .commitMessage.bottomFrame - - wm transient .commitMessage . - wm deiconify .commitMessage -} - - -# GUI - -wm title . $windowTitle - -# Buttons - -panedwindow .buttons -button .buttons.commit -text "2. Make local commit" -command commit -button .buttons.update -text $updateButtonText \ - -command update_lilypond_with_rebase -toggle_rebase -button .buttons.patch -text "3. Make patch set" \ - -command patch_from_origin -button .buttons.panic -text "Abort changes -- Reset to origin" \ - -command abort_changes -fg Blue -bg Red -label .buttons.spacer -text " " -if {![file exists $lily_dir]} { - .buttons.update configure \ - -text $initializeButtonText - .buttons.commit configure -state disabled - .buttons.patch configure -state disabled - .buttons.panic configure -state disabled -} - -# Operating buttons - -pack .buttons.update -side left -pack .buttons.commit -side left -pack .buttons.patch -side left -pack .buttons.spacer -side left -pack .buttons.panic -side left - - -# Output text box - -panedwindow .output -label .output.label -text "Command output:" -text .output.text -width 80 -height 15 \ - -xscrollcommand [list .output.horizontal set] \ - -yscrollcommand [list .output.vertical set] \ - -relief solid -border 2 -scrollbar .output.horizontal -orient h -command [list .output.text xview] -scrollbar .output.vertical -orient v -command [list .output.text yview] -pack .output.label -side left -pack .output.horizontal -side bottom -fill x -pack .output.vertical -side right -fill y -pack .output.text -expand true -anchor nw -fill both - -pack .buttons -pack .output - -#grid .buttons -row 2 -column 1 -#grid .output -row 3 -column 1 -sticky "w"