Start of work in testing the path in mp.pipes().
[mp-5.x.git] / mp_vcs.mpsl
blob735955ab9f92d20d470fc16d5052b6d3cdcdede5
1 /*
3     Minimum Profit 5.x
4     A Programmer's Text Editor
6     Version Control System support
8     Copyright (C) 1991-2011 Angel Ortega <angel@triptico.com>
10     This program is free software; you can redistribute it and/or
11     modify it under the terms of the GNU General Public License
12     as published by the Free Software Foundation; either version 2
13     of the License, or (at your option) any later version.
15     This program is distributed in the hope that it will be useful,
16     but WITHOUT ANY WARRANTY; without even the implied warranty of
17     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18     GNU General Public License for more details.
20     You should have received a copy of the GNU General Public License
21     along with this program; if not, write to the Free Software
22     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24     http://www.triptico.com
28 /** data **/
30 mp.vcs = [
31     {
32         id:     'git',
33         check:  [ '.git', '../.git', '../../.git' ],
34         opts:   [
35             'git diff',
36             'git status',
37             'git log',
38             'git diff %s',
39             'git log %s',
40             'git add %s',
41             'git blame %s'
42         ]
43     },
44     {
45         id:     'SVN',
46         check:  [ '.svn' ],
47         opts:   [
48             'svn diff',
49             'svn status',
50             'svn log',
51             'svn diff %s',
52             'svn log %s',
53             'svn add %s',
54             'svn annotate %s'
55         ]
56     }
59 /** editor actions **/
61 mp.actions['vcs'] = sub (d) {
62     local v = NULL;
64     foreach (n, mp.vcs) {
65         foreach (d, n.check) {
66             if (stat(d) != NULL) {
67                 v = n;
68                 break;
69             }
70         }
72         if (v != NULL)
73             break;
74     }
76     if (v == NULL)
77         mp.alert(L("This directory is not under a supported version control system"));
78     else {
79         local l = v.opts;
81         local t = mp.form(
82             [
83                 {
84                     label:  sprintf(L("Available %s commands"), v.id),
85                     type:   'list',
86                     list:   l,
87                     value:  mp.vcs_target
88                 }
89             ]
90         );
92         if (t != NULL) {
93             mp.vcs_target = t[0];
95             local cmd = sprintf(l[mp.vcs_target], d.name);
97             local log = mp.open(sprintf(L("<%s output>"), cmd));
99             log.txt.lines   = [ '' ];
100             log.txt.y       = 0;
102             mp.actions.exec_command(log, cmd);
103             mp.detect_syntax(log);
105             mp.move_bof(log);
106             log.txt.mod     = 0;
107             log.undo        = [];
108             log.read_only   = 1;
109         }
110     }
113 /** default key bindings **/
115 mp.keycodes['ctrl-p'] = 'vcs';
117 /** action descriptions **/
119 mp.keycodes['vcs'] = LL("Open the Version Control submenu");
121 /** code **/