gvcsfx 0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,81 @@
1
+
2
+
3
+
4
+ require 'jrubyfx'
5
+
6
+ # manually create the class
7
+
8
+ fxml_root File.join(File.dirname(__FILE__),"fx")
9
+
10
+ class Main
11
+ include JRubyFX::Controller
12
+ fxml "main.fxml"
13
+ end
14
+
15
+ class Main2
16
+ include JRubyFX::Controller
17
+ end
18
+
19
+ class FloatWin
20
+ include JRubyFX::Controller
21
+ fxml "float.fxml"
22
+
23
+ def show_context_menu(evt)
24
+ init_ctxmenu.show(@imgFloat, evt.screen_x, evt.screen_y)
25
+ end
26
+
27
+
28
+ private
29
+ def init_ctxmenu
30
+
31
+ if @ctx.nil?
32
+
33
+ @ctx = ContextMenu.new
34
+ mnuItems = []
35
+ @mnuMain = MenuItem.new("G-VCS")
36
+ @mnuMain.on_action do |evt|
37
+ #ctrl = MainWinController.new
38
+ #mainWin = JRubyFX::Controller.get_fxml_loader("main.fxml",ctrl)
39
+ #root = mainWin.load
40
+
41
+ stage = javafx.stage.Stage.new
42
+ stage.title = "G-VCS"
43
+ #stage.initModality(javafx.stage.Modality::WINDOW_MODAL)
44
+ #stage.initOwner(@imgFloat.scene.window)
45
+ ctrl = Main.load_into(stage)
46
+ #ctrl = FloatWin.load_into(stage)
47
+ #stage.scene = javafx.scene.Scene.new(root)
48
+
49
+ stage.show
50
+ end
51
+ mnuItems << @mnuMain
52
+
53
+ @mnuExit = MenuItem.new("Exit")
54
+ @mnuExit.on_action do |evt|
55
+ @imgFloat.scene.window.close
56
+ end
57
+ mnuItems << @mnuExit
58
+
59
+ @ctx.items.add_all(mnuItems)
60
+
61
+ end
62
+
63
+ @ctx
64
+ end
65
+
66
+
67
+
68
+ end
69
+
70
+ class MainApp < JRubyFX::Application
71
+ def start(stage)
72
+ with(stage) do
73
+ fxml FloatWin
74
+ show
75
+ end
76
+ end
77
+ end
78
+
79
+ MainApp.launch
80
+
81
+
@@ -0,0 +1,56 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+
18
+ require 'tlogger'
19
+ require 'singleton'
20
+
21
+ require 'gvcs'
22
+ require 'git_cli'
23
+
24
+ require_relative 'store'
25
+
26
+ module GvcsFx
27
+ class Global
28
+ include Singleton
29
+
30
+ attr_reader :logger
31
+ def initialize
32
+ @logger = Tlogger.new
33
+ end
34
+
35
+ def storage(reload = true)
36
+ if @store.nil? or reload
37
+ @store = GvcsFx::DataStore::DefaultDataStore.load
38
+ end
39
+
40
+ @store
41
+ end
42
+
43
+ def vcs
44
+ if @vcs.nil?
45
+ @vcs = Gvcs::Vcs.new
46
+ end
47
+
48
+ @vcs
49
+ end
50
+ end
51
+
52
+ class GvcsFxException < StandardError; end
53
+
54
+ GVCSFX_STORE_ROOT = File.join(Dir.home,".gvcsfx")
55
+
56
+ end
@@ -0,0 +1,40 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+
18
+ require_relative 'global'
19
+
20
+ module GvcsFx
21
+ module LogHelper
22
+
23
+ def log_debug(msg, tag = "")
24
+ if tag.nil? or tag.empty?
25
+ Global.instance.logger.debug msg
26
+ else
27
+ Global.instance.logger.tdebug tag, msg
28
+ end
29
+ end
30
+
31
+ def log_error(msg, tag = "")
32
+ if tag.nil? or tag.empty?
33
+ Global.instance.logger.error msg
34
+ else
35
+ Global.instance.logger.terror tag, msg
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,152 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+
18
+
19
+ require 'yaml'
20
+ require 'fileutils'
21
+
22
+ require_relative 'global'
23
+
24
+ module GvcsFx
25
+ module DataStore
26
+
27
+ class Workspace
28
+ attr_accessor :path, :last_access, :parent
29
+ def initialize(path, parent)
30
+ @path = path
31
+ @parent = parent
32
+ end
33
+ end
34
+
35
+ class DefaultDataStore
36
+
37
+ include Antrapol::ToolRack::ExceptionUtils
38
+
39
+ FILENAME = "workspaces_tr.yml"
40
+ DEFPATH = File.join(GvcsFx::GVCSFX_STORE_ROOT, FILENAME)
41
+
42
+ attr_reader :workspaces
43
+ attr_reader :parent, :paths, :wsList
44
+ def initialize
45
+ @workspaces = { }
46
+ @wsRef = { }
47
+ @paths = []
48
+ @parent = []
49
+ end
50
+
51
+ def store(path = DEFPATH)
52
+ if not (path.nil? or path.empty?)
53
+ if not File.exist?(File.dirname(path))
54
+ FileUtils.mkdir_p File.dirname(path)
55
+ end
56
+
57
+ @parent = @workspaces.keys.sort
58
+
59
+ File.open(path,"w") do |f|
60
+ f.write YAML.dump(self)
61
+ end
62
+ end
63
+ end
64
+
65
+ def self.load(path = DEFPATH)
66
+ if not (path.nil? or path.empty?)
67
+ begin
68
+ File.open(path,"r") do |f|
69
+ @cont = f.read
70
+ end
71
+
72
+ obj = YAML.load(@cont)
73
+
74
+ obj.parent.sort!
75
+
76
+ # sort the workspace's path
77
+ obj.workspaces.each do |k,v|
78
+ obj.workspaces[k] = v.sort_by(&:path)
79
+ end
80
+
81
+ obj
82
+
83
+ rescue Exception => ex
84
+ Global.instance.logger.error ex.message
85
+ Global.instance.logger.error "Failed to load store from '#{path}'. Returning new instance."
86
+ DefaultDataStore.new
87
+ end
88
+ else
89
+ DefaultDataStore.new
90
+ end
91
+ end
92
+
93
+ def new_project(proj)
94
+ if not_empty?(proj)
95
+ @workspaces[proj] = []
96
+ end
97
+ end
98
+
99
+ def delete_project(proj)
100
+ if not_empty?(proj) and @workspaces.keys.include?(proj)
101
+ @workspaces.delete(proj)
102
+ @parent.delete(proj)
103
+ end
104
+ end
105
+
106
+ def is_project_registered?(proj)
107
+ if not_empty?(proj)
108
+ @workspaces.keys.include?(proj)
109
+ end
110
+ end
111
+
112
+ def add_workspace(parent, path)
113
+ raise GvcsFxException, "Parent cannot be empty" if parent.nil? or parent.empty?
114
+ raise GvcsFxException, "Path cannot be empty" if path.nil? or path.empty?
115
+
116
+
117
+ if not @paths.include?(path)
118
+ if not @workspaces.keys.include?(parent)
119
+ @workspaces[parent] = []
120
+ end
121
+
122
+ ws = Workspace.new(path, parent)
123
+ @workspaces[parent] << ws
124
+ # todo sort the array of parent... but the array contains object
125
+ # custom sorter is required
126
+ @paths << path
127
+ @wsRef[path] = ws
128
+ end
129
+ end # add_workspace
130
+
131
+ def remove_workspace(path)
132
+ raise GvcsFxException, "Path cannot be empty" if path.nil? or path.empty?
133
+
134
+ ws = @wsRef[path]
135
+ @workspaces[ws.parent].delete(ws)
136
+ @paths.delete(path)
137
+ @wsRef.delete(path)
138
+
139
+ end # remove_workspace
140
+
141
+ def is_workspace_registered?(path)
142
+ @paths.include?(path.strip)
143
+ end # is workspace_registered?
144
+
145
+ def is_project_empty?(proj)
146
+ @workspaces[proj].length == 0
147
+ end
148
+
149
+ end # DefaultDataStore
150
+
151
+ end # DataStore
152
+ end # GvcsFx
@@ -0,0 +1,21 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+
18
+
19
+ module GvcsFx
20
+ VERSION = "0.3"
21
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gvcsfx
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.3'
5
+ platform: ruby
6
+ authors:
7
+ - Chris
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0.21'
19
+ name: tlogger
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.21'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.0
33
+ name: jrubyfx
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.4'
47
+ name: toolrack
48
+ prerelease: false
49
+ type: :runtime
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.4'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.1'
61
+ name: gvcs
62
+ prerelease: false
63
+ type: :runtime
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.1'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.1'
75
+ name: git_cli
76
+ prerelease: false
77
+ type: :runtime
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.1'
83
+ description: Simple and effective VCS workflow management
84
+ email:
85
+ - chrisliaw@antrapol.com
86
+ executables:
87
+ - gvcsfx
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - Gemfile
93
+ - README.md
94
+ - bin/gvcsfx
95
+ - bin/gvcsfx.rb
96
+ - config/warble.rb
97
+ - fx/add_workspace.fxml
98
+ - fx/diff.fxml
99
+ - fx/float.fxml
100
+ - fx/main.fxml
101
+ - fx/show_text.fxml
102
+ - fx/stash_select.fxml
103
+ - gvcs_fx.rb
104
+ - handlers/add_workspace_controller.rb
105
+ - handlers/event_handler.rb
106
+ - handlers/float_win_controller.rb
107
+ - handlers/fx_alert.rb
108
+ - handlers/listener.rb
109
+ - handlers/main_win_controller.rb
110
+ - handlers/notification.rb
111
+ - handlers/show_text_controller.rb
112
+ - handlers/stash_select_controller.rb
113
+ - handlers/tab_branches.rb
114
+ - handlers/tab_files.rb
115
+ - handlers/tab_ignore_rules.rb
116
+ - handlers/tab_logs.rb
117
+ - handlers/tab_repos.rb
118
+ - handlers/tab_state.rb
119
+ - handlers/tab_tags.rb
120
+ - handlers/tray.rb
121
+ - handlers/workspace.rb
122
+ - javafx_test.rb
123
+ - lib/global.rb
124
+ - lib/log_helper.rb
125
+ - lib/store.rb
126
+ - lib/version.rb
127
+ - res/accept.png
128
+ - res/cross.png
129
+ - res/tick.png
130
+ - res/version-control.png
131
+ - res/warn.png
132
+ - res/world.png
133
+ homepage: https://github.com/chrisliaw/gvcsfx
134
+ licenses: []
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 2.3.0
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.7.10
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: Generic Version Control System - JavaFX
156
+ test_files: []