vcs 0.2.148 → 0.3.0
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.
- data/AUTHORS +6 -0
- data/NEWS +9 -0
- data/README +82 -0
- data/Rakefile +7 -72
- data/SPEC.dyn.yml +10 -0
- data/SPEC.gemspec +14 -0
- data/SPEC.yml +39 -0
- data/bin/vcs +18 -16
- data/lib/vcs/changelog.rb +164 -0
- data/lib/vcs/conflict.rb +21 -0
- data/{src → lib/vcs}/cvs.rb +1 -1
- data/{src → lib/vcs}/diff.rb +2 -2
- data/lib/vcs/diffstat.rb +28 -0
- data/lib/vcs/edit.rb +16 -0
- data/{src → lib/vcs}/last_changed_date.rb +3 -5
- data/{src → lib/vcs}/mail.rb +4 -4
- data/lib/vcs/message.rb +79 -0
- data/{src → lib/vcs}/mycommit.rb +15 -15
- data/{src → lib/vcs}/news.rb +6 -6
- data/{src → lib/vcs}/prcs.rb +1 -1
- data/{src → lib/vcs}/revision.rb +3 -4
- data/lib/vcs/script.rb +19 -0
- data/{src → lib/vcs}/status.rb +1 -1
- data/{src → lib/vcs}/svn.rb +3 -5
- data/lib/vcs/url.rb +16 -0
- data/lib/vcs/vcs.rb +279 -0
- metadata +52 -150
- data/TODO +0 -19
- data/doc/jamis.rb +0 -564
- data/ruby_ex/abstract.rb +0 -254
- data/ruby_ex/abstract_node.rb +0 -85
- data/ruby_ex/algorithms/simulated_annealing.rb +0 -140
- data/ruby_ex/array_each_pair.rb +0 -18
- data/ruby_ex/ask.rb +0 -101
- data/ruby_ex/attributed_class.rb +0 -302
- data/ruby_ex/cache.rb +0 -373
- data/ruby_ex/checkout.rb +0 -12
- data/ruby_ex/choose.rb +0 -271
- data/ruby_ex/commands.rb +0 -18
- data/ruby_ex/commands/command.rb +0 -401
- data/ruby_ex/commands/datas.rb +0 -16
- data/ruby_ex/commands/datas/data.rb +0 -33
- data/ruby_ex/commands/datas/factory.rb +0 -66
- data/ruby_ex/commands/factory.rb +0 -66
- data/ruby_ex/commands/helpers.rb +0 -67
- data/ruby_ex/commands/pipe.rb +0 -64
- data/ruby_ex/commands/runners.rb +0 -17
- data/ruby_ex/commands/runners/exec.rb +0 -49
- data/ruby_ex/commands/runners/fork.rb +0 -97
- data/ruby_ex/commands/runners/runner.rb +0 -107
- data/ruby_ex/commands/seq.rb +0 -27
- data/ruby_ex/config_file.rb +0 -96
- data/ruby_ex/const_regexp.rb +0 -59
- data/ruby_ex/daemon.rb +0 -134
- data/ruby_ex/diff.rb +0 -667
- data/ruby_ex/dlogger.rb +0 -62
- data/ruby_ex/drb/dispatcher.rb +0 -252
- data/ruby_ex/drb/dispatcher_server_test.rb +0 -29
- data/ruby_ex/drb/drb_observable.rb +0 -97
- data/ruby_ex/drb/drb_observable_pool.rb +0 -27
- data/ruby_ex/drb/drb_service.rb +0 -43
- data/ruby_ex/drb/drb_undumped_attributes.rb +0 -55
- data/ruby_ex/drb/drb_undumped_indexed_object.rb +0 -54
- data/ruby_ex/drb/insecure_protected_methods.rb +0 -103
- data/ruby_ex/drb/session_client_test.rb +0 -40
- data/ruby_ex/drb/session_manager.rb +0 -246
- data/ruby_ex/drb/session_server.rb +0 -53
- data/ruby_ex/dtime.rb +0 -143
- data/ruby_ex/dumpable_proc.rb +0 -63
- data/ruby_ex/exception.rb +0 -32
- data/ruby_ex/filetype.rb +0 -229
- data/ruby_ex/fileutils_ex.rb +0 -44
- data/ruby_ex/fold.rb +0 -58
- data/ruby_ex/generate_id.rb +0 -44
- data/ruby_ex/hookable.rb +0 -262
- data/ruby_ex/hooker.rb +0 -54
- data/ruby_ex/inactive_timeout.rb +0 -137
- data/ruby_ex/indexed_node.rb +0 -66
- data/ruby_ex/io_marshal.rb +0 -100
- data/ruby_ex/ioo.rb +0 -194
- data/ruby_ex/labeled_node.rb +0 -63
- data/ruby_ex/logger_observer.rb +0 -23
- data/ruby_ex/md5sum.rb +0 -66
- data/ruby_ex/mktemp.rb +0 -208
- data/ruby_ex/module/attr_once.rb +0 -36
- data/ruby_ex/module/autoload_tree.rb +0 -75
- data/ruby_ex/module/hierarchy.rb +0 -335
- data/ruby_ex/module/instance_method_visibility.rb +0 -73
- data/ruby_ex/module_ex.rb +0 -11
- data/ruby_ex/node.rb +0 -80
- data/ruby_ex/object_monitor.rb +0 -145
- data/ruby_ex/object_monitor_activity.rb +0 -33
- data/ruby_ex/observable.rb +0 -140
- data/ruby_ex/observable_pool.rb +0 -293
- data/ruby_ex/orderedhash.rb +0 -252
- data/ruby_ex/pathname_ex.rb +0 -152
- data/ruby_ex/pp_hierarchy.rb +0 -29
- data/ruby_ex/pseudo_cache.rb +0 -190
- data/ruby_ex/queue.rb +0 -56
- data/ruby_ex/random_generators.rb +0 -25
- data/ruby_ex/random_generators/random_generator.rb +0 -31
- data/ruby_ex/random_generators/ruby.rb +0 -23
- data/ruby_ex/safe_eval.rb +0 -348
- data/ruby_ex/sendmail.rb +0 -215
- data/ruby_ex/service_manager.rb +0 -121
- data/ruby_ex/session/administrable.rb +0 -120
- data/ruby_ex/session/client.rb +0 -153
- data/ruby_ex/session/const.rb +0 -18
- data/ruby_ex/session/dispatcher.rb +0 -184
- data/ruby_ex/session/error.rb +0 -21
- data/ruby_ex/session/fetchable.rb +0 -57
- data/ruby_ex/session/fetcher.rb +0 -62
- data/ruby_ex/session/hookable.rb +0 -26
- data/ruby_ex/session/profile.rb +0 -110
- data/ruby_ex/session/server.rb +0 -582
- data/ruby_ex/session/test/administrable_test.rb +0 -337
- data/ruby_ex/session/test/basic_test.rb +0 -523
- data/ruby_ex/session/test/dispatcher_test.rb +0 -409
- data/ruby_ex/session/test/fetchable_test.rb +0 -119
- data/ruby_ex/session/test/sub_server_test.rb +0 -188
- data/ruby_ex/shuffle.rb +0 -30
- data/ruby_ex/spring.rb +0 -136
- data/ruby_ex/spring_set.rb +0 -137
- data/ruby_ex/string_ex.rb +0 -28
- data/ruby_ex/symtbl.rb +0 -106
- data/ruby_ex/synflow.rb +0 -474
- data/ruby_ex/test/unit/ui/yaml/testrunner.rb +0 -164
- data/ruby_ex/thread_mutex.rb +0 -10
- data/ruby_ex/timeout_ex.rb +0 -81
- data/ruby_ex/top_down.rb +0 -73
- data/ruby_ex/trace.rb +0 -26
- data/ruby_ex/uri/druby.rb +0 -81
- data/ruby_ex/uri/file.rb +0 -65
- data/ruby_ex/uri/ftp_ex.rb +0 -37
- data/ruby_ex/uri/http_ex.rb +0 -43
- data/ruby_ex/uri/ssh.rb +0 -92
- data/ruby_ex/uri/svn.rb +0 -118
- data/ruby_ex/uri_ex.rb +0 -45
- data/ruby_ex/verbose_object.rb +0 -30
- data/ruby_ex/version.rb +0 -66
- data/ruby_ex/yaml/basenode_ext.rb +0 -63
- data/ruby_ex/yaml/chop_header.rb +0 -23
- data/ruby_ex/yaml/transform.rb +0 -449
- data/ruby_ex/yaml/yregexpath.rb +0 -76
- data/src/ask.rb +0 -101
- data/src/changelog.rb +0 -117
- data/src/conflict.rb +0 -20
- data/src/diffstat.rb +0 -42
- data/src/message.rb +0 -64
- data/src/reply-mail.rb +0 -14
- data/src/tools.rb +0 -22
- data/src/vcs.rb +0 -176
data/AUTHORS
ADDED
data/NEWS
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
New in 0.3 2005-09-16:
|
|
2
|
+
|
|
3
|
+
* The help command now show all commands including vcs ones.
|
|
4
|
+
* New system to fill values like the subject, the title... of your
|
|
5
|
+
changelog, mails and news which belong to your patches.
|
|
6
|
+
* No more put the subject as an argument of vcs.
|
|
7
|
+
* Improve the command running handling, vcs calls are now full stream based.
|
|
8
|
+
* Add two commands `url' and `script'.
|
|
9
|
+
* Improve the error handling.
|
data/README
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
- Intro: >
|
|
4
|
+
C'est un wrapper pour les syst�mes de versions comme Svn, Cvs, Prcs,
|
|
5
|
+
Arch... Il permet donc au minimum de faire tout ce que le syst�me
|
|
6
|
+
sous-jacent propose, mais l'avantage est de pouvoir l'�tendre facilement.
|
|
7
|
+
|
|
8
|
+
- HOWTO: Reportez vous au fichier HOWTO pour configurer et installer Vcs.
|
|
9
|
+
|
|
10
|
+
- Description:
|
|
11
|
+
|
|
12
|
+
- Les commandes de base peuvent �tre surcharg�es: >
|
|
13
|
+
par exemple `svn commit' a un comportement non interactif par d�faut.
|
|
14
|
+
|
|
15
|
+
Mais l'on peut tout de m�me appeler le v�ritable `svn commit'.
|
|
16
|
+
|
|
17
|
+
Pour cela il y a une convention: toutes les m�thodes terminant par `_'
|
|
18
|
+
sont directement celles du syst�me.
|
|
19
|
+
|
|
20
|
+
Avec cela on peut v�rifier que l'outil est bien devant le vrai svn:
|
|
21
|
+
svn status_
|
|
22
|
+
|
|
23
|
+
- Quelques fonctionnalit�s:
|
|
24
|
+
|
|
25
|
+
- Un des principaux avantages est la gestion des erreurs: >
|
|
26
|
+
|
|
27
|
+
Par exemple on utilise une commande qui commit puis poste une news.
|
|
28
|
+
Si le commit r�ussit et que la news ne passe pas, il suffit de
|
|
29
|
+
relancer l'envoi de la news: svn news
|
|
30
|
+
|
|
31
|
+
En effet chaque m�thode peut conserver des fichiers, ces fichiers
|
|
32
|
+
commencent par `,'.
|
|
33
|
+
|
|
34
|
+
- Les alias de m�thodes: >
|
|
35
|
+
|
|
36
|
+
Tout comme svn et cvs il existe des raccourcis pour certaines m�thodes
|
|
37
|
+
et bien s�r lorsque l'on surcharge une m�thode, le raccourci pointe
|
|
38
|
+
vers la nouvelle m�thode.
|
|
39
|
+
|
|
40
|
+
- Quelques nouvelles m�thodes:
|
|
41
|
+
|
|
42
|
+
- svn revision: Renvoie le num�ro de r�vision courante
|
|
43
|
+
alias: rev
|
|
44
|
+
|
|
45
|
+
- svn mkchangelog: G�n�re une entr�e de ChangeLog � partir de `status'
|
|
46
|
+
alias: mkcl
|
|
47
|
+
|
|
48
|
+
- svn changelog: Concat�ne la nouvelle entr�e au v�ritable ChangeLog
|
|
49
|
+
alias: cl
|
|
50
|
+
|
|
51
|
+
- svn message: Cr�e le contenu du message du mail ou de la news
|
|
52
|
+
alias: msg
|
|
53
|
+
|
|
54
|
+
- svn mail: Envoie un mail.
|
|
55
|
+
|
|
56
|
+
- svn news: Poste une news.
|
|
57
|
+
|
|
58
|
+
- Plus facile d'�crire des scripts: >
|
|
59
|
+
|
|
60
|
+
Lorsque l'on veut automatiser un traitement fait avec un Rcs,
|
|
61
|
+
il est g�n�ralement plus simple de le faire en script shell
|
|
62
|
+
lorsque cela n'exc�de pas une dixaine de lignes. Apr�s cela certains
|
|
63
|
+
avantages des langages de script �volu�s nous manquent.
|
|
64
|
+
Pourtant certaines choses tr�s faciles peuvent devenir plus lourdes:
|
|
65
|
+
svn commit => system("svn commit")
|
|
66
|
+
|
|
67
|
+
Heureusement avec le mod�le objet d�j� pos� cela devient plus
|
|
68
|
+
raisonnable, comparez par exemple:
|
|
69
|
+
|
|
70
|
+
svn commit => svn.commit
|
|
71
|
+
|
|
72
|
+
svn info | grep '^Revision' | sed s/^Revision: //
|
|
73
|
+
|
|
74
|
+
=>
|
|
75
|
+
|
|
76
|
+
svn.info.readlines.grep(/^Revision/)[0].sub(/^Revision: /, '').to_i
|
|
77
|
+
|
|
78
|
+
- Exemple final: commit complet pour les lrde tools.
|
|
79
|
+
|
|
80
|
+
commande: svn lrdetools_commit 'votre sujet pour la news'
|
|
81
|
+
|
|
82
|
+
ensuite: laissez vous guider.
|
data/Rakefile
CHANGED
|
@@ -1,73 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'rake/rdoctask'
|
|
6
|
-
require 'rake/gempackagetask'
|
|
7
|
-
require 'rake/contrib/rubyforgepublisher'
|
|
8
|
-
|
|
9
|
-
PKG_VERSION = "0.2.#{`vcs-svn rev`.chomp}"
|
|
10
|
-
|
|
11
|
-
PKG_FILES = FileList[*%w"
|
|
12
|
-
src/**/*.rb
|
|
13
|
-
ruby_ex/**/*.rb
|
|
14
|
-
bin/**/*
|
|
15
|
-
doc/**/*
|
|
16
|
-
[A-Z]*
|
|
17
|
-
"].exclude(/\b\.svn\b|\..*\.sw[op]$|~$|README/)
|
|
18
|
-
|
|
19
|
-
desc 'Default Task'
|
|
20
|
-
task :default => :package
|
|
21
|
-
|
|
22
|
-
desc 'Publish to RubyForge'
|
|
23
|
-
task :rubyforge do
|
|
24
|
-
Rake::RubyForgePublisher.new('vcs', 'ertai').upload
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
Rake::RDocTask.new('doc') do |rdoc|
|
|
29
|
-
rdoc.title = 'Vcs -- A wrapper over any version control system'
|
|
30
|
-
rdoc.template = 'kilmer'
|
|
31
|
-
#rdoc.template = 'doc/jamis'
|
|
32
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
|
33
|
-
#rdoc.rdoc_files.add('src/vcs.rb', 'src/**/*.rb')
|
|
34
|
-
rdoc.rdoc_files.add('src/**/*.rb')
|
|
35
|
-
#rdoc.main =
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
# The Gem specification
|
|
40
|
-
spec = Gem::Specification.new do |s|
|
|
41
|
-
s.platform = Gem::Platform::RUBY
|
|
42
|
-
s.name = 'vcs'
|
|
43
|
-
s.version = PKG_VERSION
|
|
44
|
-
s.summary = 'A wrapper over any version control system'
|
|
45
|
-
s.description = '
|
|
46
|
-
Version control systems (Subversion, CVS, PRCS...), however useful,
|
|
47
|
-
are not very extensible: adding new features can be cumbersome, especially
|
|
48
|
-
if you want them for different such systems at once.
|
|
49
|
-
Vcs provide a simple dynamic hierarchy for Version Control Systems.
|
|
50
|
-
'
|
|
51
|
-
|
|
52
|
-
s.bindir = 'bin'
|
|
53
|
-
s.executables = %w[ vcs vcs-svn vcs-cvs vcs-prcs ]
|
|
54
|
-
s.default_executable = 'vcs'
|
|
55
|
-
s.files = PKG_FILES.to_a
|
|
56
|
-
s.require_path = 'src'
|
|
57
|
-
s.autorequire = 'vcs'
|
|
58
|
-
|
|
59
|
-
s.has_rdoc = true
|
|
60
|
-
s.author = 'Nicolas Pouillard'
|
|
61
|
-
s.email = 'ertai@lrde.epita.fr'
|
|
62
|
-
s.homepage = 'https://svn.lrde.epita.fr/svn/lrdetools/trunk/vcs/'
|
|
63
|
-
s.rubyforge_project = s.name
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Create compressed packages
|
|
67
|
-
Rake::GemPackageTask.new(spec) do |p|
|
|
68
|
-
p.gem_spec = spec
|
|
69
|
-
# p.need_tar = true
|
|
70
|
-
# p.need_zip = true
|
|
71
|
-
end
|
|
72
|
-
|
|
1
|
+
# Author:: The TTK Team. -*- ruby -*-
|
|
2
|
+
# Copyright:: Copyright (c) 2005 TTK team. All rights reserved.
|
|
3
|
+
# License:: Ruby License
|
|
4
|
+
# Revision:: $Id$
|
|
73
5
|
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require_gem 'core_ex'
|
|
8
|
+
load 'core_ex/rakefile_base.rf'
|
data/SPEC.dyn.yml
ADDED
data/SPEC.gemspec
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
s.name = %q{vcs}
|
|
3
|
+
s.version = "0.3.0"
|
|
4
|
+
s.date = %q{2005-09-16}
|
|
5
|
+
s.summary = %q{A wrapper over any version control system}
|
|
6
|
+
s.email = ["ertai@lrde.epita.fr"]
|
|
7
|
+
s.homepage = %q{http://rubyforge.org/projects/vcs}
|
|
8
|
+
s.rubyforge_project = %q{vcs}
|
|
9
|
+
s.description = %q{Version control systems (Subversion, CVS, PRCS...), however useful, are not very extensible: adding new features can be cumbersome, especially if you want them for different such systems at once. Vcs provide a simple dynamic hierarchy for Version Control Systems.}
|
|
10
|
+
s.authors = ["Nicolas Pouillard"]
|
|
11
|
+
s.files = ["lib/vcs/changelog.rb", "lib/vcs/conflict.rb", "lib/vcs/cvs.rb", "lib/vcs/diff.rb", "lib/vcs/diffstat.rb", "lib/vcs/edit.rb", "lib/vcs/last_changed_date.rb", "lib/vcs/mail.rb", "lib/vcs/message.rb", "lib/vcs/mycommit.rb", "lib/vcs/news.rb", "lib/vcs/prcs.rb", "lib/vcs/revision.rb", "lib/vcs/script.rb", "lib/vcs/status.rb", "lib/vcs/svn.rb", "lib/vcs/url.rb", "lib/vcs/vcs.rb", "bin/vcs", "bin/vcs-cvs", "bin/vcs-prcs", "bin/vcs-svn", "AUTHORS", "HOWTO", "NEWS", "Rakefile", "README", "SPEC.dyn.yml", "SPEC.gemspec", "SPEC.yml"]
|
|
12
|
+
s.executables = ["vcs", "vcs-cvs", "vcs-prcs", "vcs-svn"]
|
|
13
|
+
s.add_dependency(%q<ruby_ex>, ["~> 0.2.0"])
|
|
14
|
+
end
|
data/SPEC.yml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
Author: Nicolas Pouillard
|
|
3
|
+
License: GNU General Public License (GPL)
|
|
4
|
+
Revision: '$Id$'
|
|
5
|
+
|
|
6
|
+
name: vcs
|
|
7
|
+
|
|
8
|
+
title: Vcs -- A wrapper over any version control system
|
|
9
|
+
summary: A wrapper over any version control system
|
|
10
|
+
description: |
|
|
11
|
+
Version control systems (Subversion, CVS, PRCS...), however useful, are not
|
|
12
|
+
very extensible: adding new features can be cumbersome, especially if you
|
|
13
|
+
want them for different such systems at once. Vcs provide a simple dynamic
|
|
14
|
+
hierarchy for Version Control Systems.
|
|
15
|
+
homepage: http://rubyforge.org/projects/vcs
|
|
16
|
+
|
|
17
|
+
rdoc_dir: doc/html
|
|
18
|
+
tags_url: https://svn.lrde.epita.fr/svn/lrdetools/tags
|
|
19
|
+
|
|
20
|
+
commit_command: ltci
|
|
21
|
+
commit_dir: ..
|
|
22
|
+
|
|
23
|
+
rdoc_files: !filelist
|
|
24
|
+
- README
|
|
25
|
+
- AUTHORS
|
|
26
|
+
- lib/vcs/**/*.rb
|
|
27
|
+
|
|
28
|
+
pkg_files: !filelist
|
|
29
|
+
- lib/vcs/**/*.rb
|
|
30
|
+
- bin/**/*
|
|
31
|
+
- '[A-Z]*'
|
|
32
|
+
|
|
33
|
+
executables: [ vcs, vcs-svn, vcs-cvs, vcs-prcs ]
|
|
34
|
+
|
|
35
|
+
dependencies:
|
|
36
|
+
ruby_ex: [~> 0.2.0, 6087/ruby_ex-0.2.0.tar.gz]
|
|
37
|
+
|
|
38
|
+
root_test_suite: test/vcs-check.yml
|
|
39
|
+
ttk_version: ~> 0.3.0
|
data/bin/vcs
CHANGED
|
@@ -16,13 +16,11 @@ require 'logger'
|
|
|
16
16
|
require 'optparse'
|
|
17
17
|
require 'set'
|
|
18
18
|
|
|
19
|
-
VCS_VERSION = '0.
|
|
19
|
+
VCS_VERSION = '0.3.0'
|
|
20
20
|
VCS_PATH = Pathname.new(__FILE__).expand_path
|
|
21
21
|
VCS_DIR, VCS = VCS_PATH.split
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
$: << SRC.to_s
|
|
25
|
-
$: << RUBY_EX.to_s
|
|
22
|
+
LIB = VCS_DIR + '..' + 'lib'
|
|
23
|
+
$: << LIB.to_s
|
|
26
24
|
|
|
27
25
|
dir = Pathname.pwd
|
|
28
26
|
while not dir.root? and not (vcs_dir = dir + 'vcs').exist?
|
|
@@ -41,14 +39,14 @@ def LOG.format_message(severity, timestamp, msg, progname)
|
|
|
41
39
|
"#{VCS}: #{progname}#{severity.downcase}: #{msg}\n"
|
|
42
40
|
end
|
|
43
41
|
|
|
44
|
-
Pathname.glob("{#{
|
|
42
|
+
Pathname.glob("{#{LIB}/**,#{vcs_dir}}/*.rb") do |file|
|
|
45
43
|
LOG.debug { file.basename.to_s }
|
|
46
44
|
begin
|
|
47
|
-
require file.basename
|
|
48
|
-
rescue LoadError
|
|
45
|
+
require "vcs/#{file.basename}"
|
|
46
|
+
rescue LoadError
|
|
49
47
|
begin
|
|
50
48
|
require file.to_s
|
|
51
|
-
rescue
|
|
49
|
+
rescue LoadError => ex
|
|
52
50
|
raise ex
|
|
53
51
|
end
|
|
54
52
|
end
|
|
@@ -81,13 +79,13 @@ OPTS = OptionParser.new do |opts|
|
|
|
81
79
|
exit
|
|
82
80
|
end
|
|
83
81
|
|
|
84
|
-
opts.on('--mk-alias', '
|
|
82
|
+
opts.on('--mk-alias', 'Put the result of this command in your .zshrc or .bashrc') do
|
|
85
83
|
ALL_VCS_NAMES.each do |n|
|
|
86
84
|
n = n.to_s.downcase
|
|
87
85
|
if VCS_PATH.executable?
|
|
88
|
-
puts "alias #{n}=#{VCS_PATH}-#{n}"
|
|
86
|
+
puts "alias #{n}=#{VCS_PATH}-#{n} ;"
|
|
89
87
|
else
|
|
90
|
-
puts "alias #{n}=vcs-#{n}"
|
|
88
|
+
puts "alias #{n}=vcs-#{n} ;"
|
|
91
89
|
end
|
|
92
90
|
end
|
|
93
91
|
exit
|
|
@@ -95,17 +93,18 @@ OPTS = OptionParser.new do |opts|
|
|
|
95
93
|
|
|
96
94
|
opts.on('-C', '--[no-]check', 'Check your vcs configuration') do |check|
|
|
97
95
|
if check
|
|
98
|
-
Vcs.new('').call_conf_checkers
|
|
96
|
+
Vcs.new('vcs').call_conf_checkers
|
|
99
97
|
exit
|
|
100
98
|
end
|
|
101
99
|
end
|
|
102
100
|
|
|
103
|
-
opts.on('-d', '--debug LEVEL',
|
|
104
|
-
|
|
101
|
+
opts.on('-d', '--debug LEVEL', 'Set debug level') do |severity|
|
|
102
|
+
LOG.level = Logger.const_get(severity.upcase)
|
|
105
103
|
end
|
|
106
104
|
|
|
107
105
|
opts.on_tail('-h', '--help', 'Show this message') do |test|
|
|
108
106
|
STDERR.puts OPTS
|
|
107
|
+
STDERR.puts "\n\nReport bugs to <ertai@lrde.epita.fr>."
|
|
109
108
|
exit
|
|
110
109
|
end
|
|
111
110
|
|
|
@@ -116,6 +115,7 @@ OPTS = OptionParser.new do |opts|
|
|
|
116
115
|
|
|
117
116
|
end
|
|
118
117
|
|
|
118
|
+
ENV['LC_ALL'] = 'C'
|
|
119
119
|
if ENV.has_key? 'FULLNAME'
|
|
120
120
|
FULLNAME = ENV['FULLNAME']
|
|
121
121
|
else
|
|
@@ -125,7 +125,9 @@ else
|
|
|
125
125
|
end
|
|
126
126
|
env = %w[ EMAIL FULLNAME EDITOR PAGER ]
|
|
127
127
|
if env.all? { |s| ENV[s] }
|
|
128
|
-
|
|
128
|
+
EDITOR = ENV['EDITOR'].to_cmd
|
|
129
|
+
PAGER = ENV['PAGER'].to_cmd
|
|
130
|
+
EMAIL = ENV['EMAIL']
|
|
129
131
|
else
|
|
130
132
|
env.each { |s| LOG.error "Need #{s} in the environement" unless ENV[s] }
|
|
131
133
|
exit
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
|
2
|
+
# Copyright:: Copyright (c) 2004 LRDE. All rights reserved.
|
|
3
|
+
# License:: GNU General Public License (GPL).
|
|
4
|
+
# Revision:: $Id: header 98 2004-09-29 12:07:43Z ertai $
|
|
5
|
+
|
|
6
|
+
require 'vcs/vcs'
|
|
7
|
+
require 'vcs/svn'
|
|
8
|
+
|
|
9
|
+
class Svn
|
|
10
|
+
|
|
11
|
+
@@file_st =
|
|
12
|
+
{
|
|
13
|
+
'A' => 'New',
|
|
14
|
+
'D' => 'Remove',
|
|
15
|
+
}
|
|
16
|
+
@@file_st.default = ''
|
|
17
|
+
|
|
18
|
+
@@prop_st =
|
|
19
|
+
{
|
|
20
|
+
'M' => 'Changed property'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
def mkchangelog_from_status ( *args )
|
|
24
|
+
result = []
|
|
25
|
+
from_status(*args) do |line, file_st, prop_st, copy_st, file|
|
|
26
|
+
next if file_st =~ /[?X]/
|
|
27
|
+
next if file == 'ChangeLog'
|
|
28
|
+
ls = []
|
|
29
|
+
ls << @@file_st[file_st] if @@file_st.has_key? file_st
|
|
30
|
+
ls << @@prop_st[prop_st].downcase if @@prop_st.has_key? prop_st
|
|
31
|
+
result << [file, ls.join(', ')]
|
|
32
|
+
end
|
|
33
|
+
raise Failure, 'No changes, so no ChangeLog entry.' if result.empty?
|
|
34
|
+
result
|
|
35
|
+
end
|
|
36
|
+
private :mkchangelog_from_status
|
|
37
|
+
|
|
38
|
+
end # class Svn
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class Vcs
|
|
42
|
+
|
|
43
|
+
class MustBeFilled < Exception
|
|
44
|
+
attr_reader :file
|
|
45
|
+
def initialize ( file )
|
|
46
|
+
@file = file
|
|
47
|
+
super("You must fill this file: `#{file.to_s}'")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
@@subject_format = '<%= rev %>: <%= title %>'
|
|
52
|
+
|
|
53
|
+
def mkchangelog! ( *args )
|
|
54
|
+
error_handling :changelog_failed
|
|
55
|
+
|
|
56
|
+
unless CL.exist?
|
|
57
|
+
raise Failure, "No `#{CL}', you are probably not in a valid directory."
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
cl = ADD_CL
|
|
61
|
+
|
|
62
|
+
# Already filled if ,ChangeLog.add exists and not begin by ---
|
|
63
|
+
if cl.exist?
|
|
64
|
+
raise MustBeFilled, cl if cl.read =~ /\A---/
|
|
65
|
+
require 'erb'
|
|
66
|
+
ls = []
|
|
67
|
+
YAML.each_document("--- |\n" + cl.read) { |x| (ls.size == 2)? break : ls << x }
|
|
68
|
+
title_subject, input = ls
|
|
69
|
+
header = { 'title' => title_subject[/^title: (.*)$/, 1],
|
|
70
|
+
'subject' => title_subject[/^subject: (.*)$/, 1] }
|
|
71
|
+
rev = revision.read.to_i + 1
|
|
72
|
+
header.merge!('rev' => rev, 'revision' => rev)
|
|
73
|
+
raise "no title: reopen #{ADD_CL}" if header['title'].nil?
|
|
74
|
+
header['title'].sub!(/\.$/, '')
|
|
75
|
+
b = getBinding(header)
|
|
76
|
+
header = ERB.new(header.to_yaml, $SAFE, '<-%->', '$erbout_').result(b)
|
|
77
|
+
META.open('w') { |f| f.puts header }
|
|
78
|
+
output = ERB.new(input, $SAFE, '<-%->', '$erbout_').result(b)
|
|
79
|
+
return output
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
cl_add = mkchangelog_from_status(*args)
|
|
83
|
+
LOG.info "Creating a new `#{cl}' file"
|
|
84
|
+
cl.open('w') do |f|
|
|
85
|
+
head = Time.now.strftime("%Y-%m-%d #{FULL_EMAIL}")
|
|
86
|
+
f.puts "
|
|
87
|
+
|--- | ########## Fill this file correctly and remove this line ########## | ---
|
|
88
|
+
|title:
|
|
89
|
+
|subject: #{@@subject_format}.
|
|
90
|
+
|
|
|
91
|
+
|--- | ###################### Your ChangeLog entrie ###################### | ---
|
|
92
|
+
|#{head}
|
|
93
|
+
|
|
|
94
|
+
|\t<%= title %>.
|
|
95
|
+
|
|
|
96
|
+
|".head_cut!
|
|
97
|
+
|
|
98
|
+
cl_add.each do |file, str|
|
|
99
|
+
f.puts "\t* #{file}: #{str}."
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
f.puts "|
|
|
103
|
+
|--- | ########### This line, and those below, will be ignored ########### | ---
|
|
104
|
+
|Instructions:
|
|
105
|
+
|\t* The first line must be removed when this file is filled.
|
|
106
|
+
|\t* After you must specify a title, for the news/mail subject.
|
|
107
|
+
|\t* The line containing <%= title %> will be replaced by your title,
|
|
108
|
+
|\t <%= subject %> by the subject line, <%= rev %> by the revision...
|
|
109
|
+
|\t* Everywhere in the document you can get/compute some values with
|
|
110
|
+
|\t these tags <%= aRubyExpression %> even some vcs specific call.
|
|
111
|
+
|\t For example <%= status.read %> will include the `svn status' output.
|
|
112
|
+
|
|
|
113
|
+
|".head_cut!
|
|
114
|
+
with(f).diff!(*args)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
raise MustBeFilled, cl
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def concat_changelog! ( *args )
|
|
121
|
+
error_handling :changelog_failed
|
|
122
|
+
|
|
123
|
+
if cl_entry = mkchangelog(*args)
|
|
124
|
+
|
|
125
|
+
unless TMP_CL.exist?
|
|
126
|
+
LOG.info "Moving `#{CL}' to `#{TMP_CL}' ..."
|
|
127
|
+
CL.rename(TMP_CL)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
CL.open('w') do |file|
|
|
131
|
+
LOG.info "Prepending `#{ADD_CL}' to `#{CL}' ..."
|
|
132
|
+
file.print cl_entry
|
|
133
|
+
file.puts
|
|
134
|
+
file.print TMP_CL.read
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
return cl_entry
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def changelog_failed
|
|
143
|
+
if TMP_CL.exist?
|
|
144
|
+
LOG.info "Restoring `#{CL}' from `#{TMP_CL}' ..."
|
|
145
|
+
TMP_CL.rename(CL)
|
|
146
|
+
end
|
|
147
|
+
LOG.info "#{ADD_CL}: Contains your ChangeLog entry" if ADD_CL.exist?
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def getBinding ( header )
|
|
151
|
+
code = []
|
|
152
|
+
header.each do |k, v|
|
|
153
|
+
code << "#{k} = #{v.inspect}"
|
|
154
|
+
end
|
|
155
|
+
code << 'binding'
|
|
156
|
+
eval(code.join('; '))
|
|
157
|
+
end
|
|
158
|
+
protected :getBinding
|
|
159
|
+
|
|
160
|
+
alias_command :mkcl, :mkchangelog
|
|
161
|
+
alias_command :ctcl, :concat_changelog
|
|
162
|
+
|
|
163
|
+
end # class Vcs
|
|
164
|
+
|