diff --git a/ChangeLog b/ChangeLog index 654dbcd65..bcd7d3a7e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-06-18 Don Allingham + * src/GrampsDb/_GrampsDBDir.py: revision control check in + * src/DbManager.py: revision control check in + * src/glade/gramps.glade: revision control check in + 2007-06-18 Don Allingham * src/DbManager.py: check for revisions diff --git a/src/DbManager.py b/src/DbManager.py index 34c3d7bb0..dca8ad786 100644 --- a/src/DbManager.py +++ b/src/DbManager.py @@ -34,6 +34,7 @@ __revision__ = "$Revision: 8197 $" import const import os import time +import subprocess from gettext import gettext as _ #------------------------------------------------------------------------- @@ -108,6 +109,7 @@ class DbManager: self.dblist = self.glade.get_widget('dblist') self.rename = self.glade.get_widget('rename') self.repair = self.glade.get_widget('repair') + self.rcs = self.glade.get_widget('rcs') self.msg = self.glade.get_widget('msg') self.model = None self.dbstate = dbstate @@ -135,6 +137,8 @@ class DbManager: self.new.connect('clicked', self.__new_db) self.rename.connect('clicked', self.__rename_db) self.repair.connect('clicked', self.__repair_db) + if _rcs_found: + self.rcs.connect('clicked', self.__rcs) self.selection.connect('changed', self.__selection_changed) self.dblist.connect('button-press-event', self.__button_press) @@ -167,13 +171,28 @@ class DbManager: if not node: self.connect.set_sensitive(False) self.rename.set_sensitive(False) + self.rcs.hide() self.repair.hide() self.remove.set_sensitive(False) else: + + is_rev = len(self.model.get_path(node)) > 1 + + if is_rev: + self.rcs.set_label(_("Check out")) + else: + self.rcs.set_label(_("Check in")) + if store.get_value(node, OPEN_COL): self.connect.set_sensitive(False) + if _rcs_found: + self.rcs.show() else: - self.connect.set_sensitive(True) + self.connect.set_sensitive(not is_rev) + if _rcs_found and is_rev: + self.rcs.show() + else: + self.rcs.hide() self.rename.set_sensitive(True) if store.get_value(node, STOCK_COL) == gtk.STOCK_DIALOG_ERROR: path = store.get_value(node, PATH_COL) @@ -202,11 +221,6 @@ class DbManager: The last modified column simply displays the last modification time. """ - # build the icon column - render = gtk.CellRendererPixbuf() - icon_column = gtk.TreeViewColumn('', render, stock_id=STOCK_COL) - self.dblist.append_column(icon_column) - # build the database name column render = gtk.CellRendererText() render.set_property('editable', True) @@ -216,6 +230,12 @@ class DbManager: self.column.set_sort_column_id(NAME_COL) self.dblist.append_column(self.column) + # build the icon column + render = gtk.CellRendererPixbuf() + icon_column = gtk.TreeViewColumn(_('Status'), render, + stock_id=STOCK_COL) + self.dblist.append_column(icon_column) + # build the last modified cocolumn render = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Last modified'), render, text=DATE_COL) @@ -272,7 +292,7 @@ class DbManager: items[4], items[5], items[6]] iter = self.model.append(None, data) for rdata in find_revisions(os.path.join(items[1], "rev.gramps,v")): - data = [rdata[0], "", "", rdata[1], 0, False, "" ] + data = [rdata[0], "", "", "", 0, False, "" ] self.model.append(iter, data) self.dblist.set_model(self.model) @@ -312,6 +332,12 @@ class DbManager: _("Could not rename family tree"), str(msg)) + def __rcs(self, obj): + store, node = self.selection.get_selected() + check_in(self.dbstate.db, + os.path.join(self.dbstate.db.get_save_path(), "rev.gramps"), + None) + def __remove_db(self, obj): """ Callback associated with the Remove button. Get the selected @@ -425,8 +451,8 @@ class DbManager: name_file.close() self.current_names.append(title) - node = self.model.append([title, new_path, path_name, - _("Never"), 0, False, '']) + node = self.model.append(None, [title, new_path, path_name, + _("Never"), 0, False, '']) self.selection.select_iter(node) path = self.model.get_path(node) @@ -489,10 +515,13 @@ def icon_values(dirpath, active, open): def find_revisions(name): import re - import subprocess rev = re.compile("\s*revision\s+([\d\.]+)") date = re.compile("\s*date:\s+([^;]+);") + + if not os.path.isfile(name): + return [] + rlog = [ "rlog" , name ] proc = subprocess.Popen(rlog, stdout = subprocess.PIPE) @@ -514,3 +543,30 @@ def find_revisions(name): revlist.append((rev_str, date_str)) return revlist + +def check_in(db, filename, callback): + init = [ "rcs", '-i', '-U', '-q', '-t'"GRAMPS database", ] + ci = [ "ci", '-m"update"', "-q" ] + + proc = subprocess.Popen(init + [filename + ",v"], stderr = subprocess.PIPE) + status = proc.wait() + message = "\n".join(proc.stderr.readlines()) + proc.stderr.close() + del proc + + xmlwrite = GrampsDbUtils.XmlWriter(db, callback, + False, False) + xmlwrite.write(filename) + + cmd = ci + [filename] + + proc = subprocess.Popen( + cmd, + stdin = subprocess.PIPE, + stderr = subprocess.PIPE ) + proc.stdin.write("comment") + proc.stdin.close() + message = "\n".join(proc.stderr.readlines()) + proc.stderr.close() + status = proc.wait() + del proc diff --git a/src/GrampsDb/_GrampsDBDir.py b/src/GrampsDb/_GrampsDBDir.py index eec48a342..1991ee197 100644 --- a/src/GrampsDb/_GrampsDBDir.py +++ b/src/GrampsDb/_GrampsDBDir.py @@ -449,7 +449,7 @@ class GrampsDBDir(GrampsDbBase,UpdateCallback): for base in [ FAMILY_TBL, PLACES_TBL, SOURCES_TBL, MEDIA_TBL, EVENTS_TBL, PERSON_TBL, REPO_TBL, NOTE_TBL, REF_MAP, META ]: path = os.path.join(name, base + ".db") - if not os.access(path, os.W_OK): + if os.path.isfile(path) and not os.access(path, os.W_OK): return True return False diff --git a/src/glade/gramps.glade b/src/glade/gramps.glade index 4a272db5a..b76b9dfbf 100644 --- a/src/glade/gramps.glade +++ b/src/glade/gramps.glade @@ -15758,6 +15758,17 @@ Very High True + + + + True + True + Check In + True + GTK_RELIEF_NORMAL + True + +