falkorlib 0.8.10 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +60 -117
  3. data/README.md +46 -10
  4. data/binscripts/bootstrap.sh +8 -10
  5. data/completion/_falkor +16 -1
  6. data/falkorlib.gemspec +14 -14
  7. data/lib/falkorlib/bootstrap/base.rb +37 -32
  8. data/lib/falkorlib/bootstrap/git.rb +19 -4
  9. data/lib/falkorlib/bootstrap/latex.rb +7 -2
  10. data/lib/falkorlib/bootstrap/vagrant.rb +17 -10
  11. data/lib/falkorlib/cli.rb +16 -1
  12. data/lib/falkorlib/common.rb +3 -3
  13. data/lib/falkorlib/config.rb +3 -3
  14. data/lib/falkorlib/gem_tasks.rb +1 -1
  15. data/lib/falkorlib/git_tasks.rb +1 -1
  16. data/lib/falkorlib/puppet_tasks.rb +1 -1
  17. data/lib/falkorlib/version.rb +2 -1
  18. data/spec/falkorlib/bootstrap_latex_spec.rb +6 -5
  19. data/spec/falkorlib/bootstrap_spec.rb +45 -1
  20. data/spec/falkorlib/git_spec.rb +2 -2
  21. data/spec/falkorlib/gitflow_spec.rb +5 -4
  22. data/templates/gitignore/All.gitignore +2 -0
  23. data/templates/gitignore/Python.gitignore +162 -0
  24. data/templates/gitignore/TeX.gitignore +309 -0
  25. data/templates/latex/beamer/.Makefile.local +1 -0
  26. data/templates/latex/beamer/_content.md.erb +1 -1
  27. data/templates/latex/beamer/main.tex.erb +20 -8
  28. data/templates/latex/images/logo_ANSSI.png +0 -0
  29. data/templates/latex/images/logo_RF.png +0 -0
  30. data/templates/motd/motd.erb +2 -2
  31. data/templates/vagrant/.gitignore +14 -0
  32. data/templates/vagrant/Vagrantfile.erb +53 -15
  33. data/templates/vagrant/vagrant/config.yaml.sample +9 -6
  34. data/templates/vagrant/vagrant/scripts/bootstrap.sh +32 -14
  35. metadata +86 -79
  36. data/templates/latex/images/logo_UL.pdf +0 -0
  37. data/templates/latex/images/logo_ULHPC.pdf +0 -0
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2020-04-20 16:13 svarrette>
3
+ # Time-stamp: <Sat 2024-08-31 16:34 svarrette>
4
4
  ################################################################################
5
5
  # Interface for the main Bootstrapping operations
6
6
  #
@@ -215,11 +215,26 @@ module FalkorLib
215
215
  run %( git crypt add-gpg-user #{k} )
216
216
  end
217
217
  end
218
+ end # gitcrypt
218
219
 
220
+ ###### gitignore ######
221
+ # Initialize .gitignore in the [current] directory
222
+ def gitignore(dir = Dir.pwd, options = {})
223
+ path = normalized_path(dir)
224
+ unless File.directory?(path)
225
+ warning "The directory '#{path}' does not exist yet."
226
+ warning 'Do you want to create (and git init) this directory?'
227
+ really_continue?
228
+ run %(mkdir -p #{path})
229
+ end
230
+ templatedir = File.join( FalkorLib.templates, 'gitignore')
231
+ src_gitignore = 'All.gitignore' # Default without any option
232
+ src_gitignore = 'TeX.gitignore' if options[:latex]
233
+ src_gitignore = 'Python.gitignore' if options[:python]
234
+ src_gitignore = 'All.gitignore' if options[:all]
235
+ run %(cp #{templatedir}/#{src_gitignore} #{path}/.gitignore)
236
+ end # gitignore
219
237
 
220
238
 
221
-
222
- end # gitcrypt
223
-
224
239
  end # module Bootstrap
225
240
  end # module FalkorLib
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2017-01-16 23:15 svarrette>
3
+ # Time-stamp: <Thu 2023-11-23 18:13 svarrette>
4
4
  ################################################################################
5
5
  # Interface for the main Bootstrapping operations
6
6
  #
@@ -100,12 +100,17 @@ module FalkorLib
100
100
  info "populating '#{src_project_dir}'"
101
101
  #FalkorLib::Bootstrap::Link.root(srcdir, { :verbose => true} )
102
102
  FalkorLib::Bootstrap::Link.makefile(srcdir, :no_interaction => true)
103
- [ '_style.sty', '.gitignore' ].each do |f|
103
+ [ '_style.sty' ].each do |f|
104
104
  Dir.chdir( srcdir ) do
105
105
  dst = ".makefile.d/latex/#{f}"
106
106
  run %( ln -s #{dst} #{f} ) unless File.exist?( File.join(srcdir, f) )
107
107
  end
108
108
  end
109
+ [ '.gitignore' ].each do |f| # .gitignore no longer accepted as symlink
110
+ Dir.chdir( srcdir ) do
111
+ run %( cp .makefile.d/latex/#{f} #{f} ) unless File.exist?( File.join(srcdir, f) )
112
+ end
113
+ end
109
114
  if type == :beamer
110
115
  f = 'beamerthemeFalkor.sty'
111
116
  dst = "#{FalkorLib.config[:git][:submodulesdir]}/beamerthemeFalkor/#{f}"
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2020-04-20 10:23 svarrette>
3
+ # Time-stamp: <Mon 2023-12-04 16:37 svarrette>
4
4
  ################################################################################
5
5
  # Interface for Bootstrapping MkDocs
6
6
  #
@@ -39,9 +39,23 @@ module FalkorLib
39
39
  "Select OS to configure within your vagrant boxes by default",
40
40
  (config[:boxes].keys.find_index(config[:os]) + 1))
41
41
  end
42
+ # Eventually adapt default provider and IP range
43
+ providers = ['virtualbox', 'libvirt']
44
+ default_provider = (config[:os] =~ /_uefi$/) ? 'libvirt': 'virtualbox'
45
+ info "OS selected: #{config[:os]} (thus with default provider: #{default_provider})"
46
+ config[:provider] = select_from(providers,
47
+ "Confirm vagrant hypervisor provider:",
48
+ providers.find_index(default_provider)+1)
49
+ config[:range] = case config[:provider]
50
+ when 'libvirt'
51
+ '192.168.122.1/24'
52
+ else
53
+ '192.168.56.0/21'
54
+ end
42
55
  [ :ram, :vcpus, :domain, :range ].each do |k|
43
56
  config[k.to_sym] = ask("\tDefault #{k.capitalize}:", config[k.to_sym])
44
57
  end
58
+
45
59
  puts config.to_yaml
46
60
  FalkorLib::GitFlow.start('feature', 'vagrant', rootdir) if (use_git && FalkorLib::GitFlow.init?(rootdir))
47
61
  init_from_template(templatedir, rootdir, config,
@@ -55,15 +69,8 @@ module FalkorLib
55
69
  [ 'bootstrap.sh'].each do |f|
56
70
  FalkorLib::Git.add(File.join(scriptsdir, "#{f}")) if use_git
57
71
  end
58
- #puppetdir = File.join(confdir, 'puppet')
59
- Dir.chdir( rootdir ) do
60
- run %(git ignore '.vagrant/' ) if command?('git-ignore')
61
- # run %(ln -s README.md index.md )
62
- # run %(ln -s README.md contributing/index.md )
63
- # run %(ln -s README.md setup/index.md )
64
- end
65
- if File.exist?(File.join(rootdir, '.gitignore'))
66
- FalkorLib::Git.add(File.join(rootdir, '.gitignore')) if use_git
72
+ [ '.gitignore', '.ruby-version' ].each do |f|
73
+ FalkorLib::Git.add(File.join(rootdir, "#{f}")) if (use_git && File.exist?(File.join(rootdir, "#{f}")))
67
74
  end
68
75
  return 0
69
76
  #exit_status.to_i
data/lib/falkorlib/cli.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2020-04-20 17:04 svarrette>
3
+ # Time-stamp: <Sat 2024-08-31 16:30 svarrette>
4
4
  ################################################################################
5
5
  # Interface for the CLI
6
6
  #
@@ -93,6 +93,21 @@ CONFIG_LONG_DESC
93
93
  FalkorLib::Bootstrap.gitcrypt(path, options)
94
94
  end # gitcrypt
95
95
 
96
+ ###### gitignore ######
97
+ method_option :all, :aliases => ['--all', '-a' ], :type => :boolean, :default => true,
98
+ :desc => "Ignore all files (except .gitignore)"
99
+ method_option :latex, :aliases => ['--latex', '--tex', '-l' ], :type => :boolean, :default => false,
100
+ :desc => "Setup .gitignore for LaTeX sources"
101
+ method_option :python, :aliases => '-p', :type => :boolean, :default => false,
102
+ :desc => "Setup .gitignore for Python project"
103
+ #......................................
104
+ desc "gitignore <PATH> [options]", "Initialize .gitignore for the [current] directory (by default, ignore all files but .gitignore"
105
+ def gitignore(path = '.')
106
+ FalkorLib::Bootstrap.gitignore(path, options)
107
+ end # gitignore
108
+
109
+
110
+
96
111
  ###### init ######
97
112
  desc "init <PATH> [options]", "Bootstrap a Git Repository"
98
113
  long_desc <<-INIT_LONG_DESC
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Sun 2020-04-12 14:38 svarrette>
3
+ # Time-stamp: <Thu 2023-11-23 23:06 svarrette>
4
4
  ################################################################################
5
5
 
6
6
  require "falkorlib"
@@ -66,7 +66,7 @@ module FalkorLib #:nodoc:
66
66
  def warning(str)
67
67
  puts cyan("/!\\ WARNING: " + str)
68
68
  end
69
- alias_method :warn, :warning
69
+ # alias_method :warn, :warning # FIXME erb invokes also its own warn method
70
70
 
71
71
  ## Print an error message and abort
72
72
  def error(str)
@@ -375,7 +375,7 @@ module FalkorLib #:nodoc:
375
375
  next
376
376
  end
377
377
  #puts config.to_yaml
378
- content += ERB.new(File.read(erb.to_s), nil, '<>').result(binding)
378
+ content += ERB.new(File.read(erb.to_s), trim_mode: '<>').result(binding)
379
379
  end
380
380
  # error "Unable to find the template file #{erbfile}" unless File.exists? (erbfile )
381
381
  # template = File.read("#{erbfile}")
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Thu 2022-06-02 19:14 svarrette>
3
+ # Time-stamp: <Tue 2023-11-21 17:21 svarrette>
4
4
  ################################################################################
5
5
  # FalkorLib Configuration
6
6
  #
@@ -56,8 +56,8 @@ module FalkorLib #:nodoc:
56
56
  #:custom_cfg => '.falkorlib.yaml',
57
57
  :rvm => {
58
58
  # See https://www.ruby-lang.org/en/downloads/branches/ for stable branches
59
- :rubies => [ '3.1.2', '3.0.4', '2.7.6'],
60
- :version => '3.1.2',
59
+ :rubies => [ '3.2.2', '3.1.4', '3.0.6', '2.7.8'],
60
+ :version => '3.1.4',
61
61
  :versionfile => '.ruby-version',
62
62
  :gemsetfile => '.ruby-gemset'
63
63
  },
@@ -1 +1 @@
1
- lib/falkorlib/tasks/gem.rb
1
+ tasks/gem.rb
@@ -1 +1 @@
1
- lib/falkorlib/tasks/git.rb
1
+ tasks/git.rb
@@ -1 +1 @@
1
- lib/falkorlib/tasks/puppet.rb
1
+ tasks/puppet.rb
@@ -19,7 +19,7 @@ module FalkorLib #:nodoc:
19
19
  # MAJOR: Defines the major version
20
20
  # MINOR: Defines the minor version
21
21
  # PATCH: Defines the patch version
22
- MAJOR, MINOR, PATCH = 0, 8, 10
22
+ MAJOR, MINOR, PATCH = 0, 9, 1
23
23
 
24
24
  module_function
25
25
 
@@ -75,3 +75,4 @@ module FalkorLib #:nodoc:
75
75
  end
76
76
 
77
77
 
78
+
@@ -3,7 +3,7 @@
3
3
  #########################################
4
4
  # bootstrap_latex_spec.rb
5
5
  # @author Sebastien Varrette <Sebastien.Varrette@uni.lu>
6
- # Time-stamp: <Thu 2017-08-17 22:28 svarrette>
6
+ # Time-stamp: <Thu 2023-11-23 18:18 svarrette>
7
7
  #
8
8
  # @description Check the Bootstrapping operations for LaTeX-based projects
9
9
  #
@@ -92,17 +92,18 @@ describe FalkorLib::Bootstrap do
92
92
 
93
93
  # check src directory
94
94
  expect(Dir.exist?(srcdir)).to be true
95
- src_latex_symlinks = [ 'Makefile', '_style.sty', '.gitignore' ]
95
+ src_latex_symlinks = [ 'Makefile', '_style.sty' ]
96
96
  src_latex_symlinks.each do |f|
97
97
  file = File.join(srcdir, f)
98
98
  expect(File.exist?(file)).to be true
99
99
  expect(File.readlink(file)).to include '.makefile.d/latex'
100
100
  end
101
101
 
102
- src_latex_files = [ "#{name}.tex" ]
103
- src_latex_files << '_content.md' if type == :beamer
104
- src_latex_files = [ '_abstract.tex', '_conclusion.tex', '_experiments.tex', '_introduction.tex', 'biblio.bib', '_related_works.tex' ] if type == :article
102
+ src_latex_files = [ "#{name}.tex", '.gitignore' ]
103
+ src_latex_files += [ '_content.md', '.Makefile.local' ] if type == :beamer
104
+ src_latex_files += [ '_abstract.tex', '_conclusion.tex', '_experiments.tex', '_introduction.tex', 'biblio.bib', '_related_works.tex' ] if type == :article
105
105
  src_latex_files.each do |f|
106
+ # $stderr.puts "=> checking file: #{f}"
106
107
  file = File.join(srcdir, f)
107
108
  expect(File.exist?(file)).to be true
108
109
  end
@@ -2,7 +2,7 @@
2
2
  #########################################
3
3
  # bootstrap_spec.rb
4
4
  # @author Sebastien Varrette <Sebastien.Varrette@uni.lu>
5
- # Time-stamp: <Mon 2020-04-20 09:58 svarrette>
5
+ # Time-stamp: <Sat 2024-08-31 16:18 svarrette>
6
6
  #
7
7
  # @description Check the basic Bootstrapping operations
8
8
  #
@@ -186,6 +186,50 @@ describe FalkorLib::Bootstrap do
186
186
  expect(File).to exist( File.join(dir, f))
187
187
  end
188
188
  end
189
+
190
+ it "#gitignore -- git ignore population from default templates (ignore all)" do
191
+ c = FalkorLib::Bootstrap.gitignore(dir, { :no_interaction => true })
192
+ gitignore = File.join(dir, '.gitignore')
193
+ expect(File).to exist( gitignore )
194
+ # Default .gitignore should ignore itself
195
+ File.read(File.realpath( gitignore )) do |f|
196
+ f.should include "!.gitignore"
197
+ end
198
+ end
199
+
200
+ it "#gitignore -- git ignore population from LaTeX templates" do
201
+ c = FalkorLib::Bootstrap.gitignore(dir, { :latex => true, :no_interaction => true })
202
+ gitignore = File.join(dir, '.gitignore')
203
+ expect(File).to exist( gitignore )
204
+ # Default .gitignore should ignore itself
205
+ File.read(File.realpath( gitignore )) do |f|
206
+ [
207
+ "*.aux",
208
+ "*.synctex",
209
+ "/*.pdf", # ignore local PDF
210
+ ].each do |pattern|
211
+ f.should include "#{pattern}"
212
+ end
213
+ end
214
+ end
215
+
216
+ it "#gitignore -- git ignore population from Python templates" do
217
+ c = FalkorLib::Bootstrap.gitignore(dir, { :python => true, :no_interaction => true })
218
+ gitignore = File.join(dir, '.gitignore')
219
+ expect(File).to exist( gitignore )
220
+ # Default .gitignore should ignore itself
221
+ File.read(File.realpath( gitignore )) do |f|
222
+ [
223
+ "__pycache__/",
224
+ "*.egg-info",
225
+ "*.nox",
226
+ ].each do |pattern|
227
+ f.should include "#{pattern}"
228
+ end
229
+ end
230
+ end
231
+
232
+
189
233
  end
190
234
 
191
235
  if (ctx == :with_git and !ENV['TRAVIS_CI_RUN'])
@@ -2,7 +2,7 @@
2
2
  #########################################
3
3
  # git_spec.rb
4
4
  # @author Sebastien Varrette <Sebastien.Varrette@uni.lu>
5
- # Time-stamp: <Sun 2022-06-05 17:15 svarrette>
5
+ # Time-stamp: <Wed 2023-11-22 17:21 svarrette>
6
6
  #
7
7
  # @description Check the Git operations
8
8
  #
@@ -316,7 +316,7 @@ describe FalkorLib::Git do
316
316
 
317
317
  [ :subtrees, :submodules ].each do |type|
318
318
  it "#config_warn(#{type})" do
319
- t = capture(:stdout) { FalkorLib::Git.config_warn(type) }
319
+ t = capture(:stderr) { FalkorLib::Git.config_warn(type) }
320
320
  expect(t).to include "FalkorLib.config.git"
321
321
  expect(t).to include "FalkorLib.config.git.submodulesdir" if type == :submodules
322
322
  end
@@ -2,7 +2,7 @@
2
2
  #########################################
3
3
  # gitflow_spec.rb
4
4
  # @author Sebastien Varrette <Sebastien.Varrette@uni.lu>
5
- # Time-stamp: <Sun 2020-04-12 15:15 svarrette>
5
+ # Time-stamp: <Wed 2023-11-22 09:52 svarrette>
6
6
  #
7
7
  # @description Check the Git Flow operations -- see https://github.com/nvie/gitflow
8
8
  #
@@ -50,7 +50,7 @@ describe FalkorLib::GitFlow do
50
50
  it "#branch" do
51
51
  expected = {
52
52
  :master => 'production',
53
- :develop => 'devel'
53
+ :develop => 'master'
54
54
  }
55
55
  expected.each do |type,v|
56
56
  b = FalkorLib::GitFlow.branches(type.to_sym, dir)
@@ -82,9 +82,10 @@ describe FalkorLib::GitFlow do
82
82
  c = FalkorLib::GitFlow.guess_gitflow_config(dir)
83
83
  {
84
84
  :master => 'production',
85
- :develop => 'devel'
85
+ :develop => 'master'
86
86
  }.each do |type,v|
87
- expect(c[:branches][type.to_sym]).to eq(v)
87
+ expect(c[:branches][type.to_sym]).to eq(v) if v.is_a? String
88
+ expect(v).to include(c[:branches][type.to_sym]) if v.is_a? Array
88
89
  end
89
90
  {
90
91
  :feature => 'feature/',
@@ -0,0 +1,2 @@
1
+ *
2
+ !.gitignore
@@ -0,0 +1,162 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
110
+ .pdm.toml
111
+ .pdm-python
112
+ .pdm-build/
113
+
114
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
115
+ __pypackages__/
116
+
117
+ # Celery stuff
118
+ celerybeat-schedule
119
+ celerybeat.pid
120
+
121
+ # SageMath parsed files
122
+ *.sage.py
123
+
124
+ # Environments
125
+ .env
126
+ .venv
127
+ env/
128
+ venv/
129
+ ENV/
130
+ env.bak/
131
+ venv.bak/
132
+
133
+ # Spyder project settings
134
+ .spyderproject
135
+ .spyproject
136
+
137
+ # Rope project settings
138
+ .ropeproject
139
+
140
+ # mkdocs documentation
141
+ /site
142
+
143
+ # mypy
144
+ .mypy_cache/
145
+ .dmypy.json
146
+ dmypy.json
147
+
148
+ # Pyre type checker
149
+ .pyre/
150
+
151
+ # pytype static type analyzer
152
+ .pytype/
153
+
154
+ # Cython debug symbols
155
+ cython_debug/
156
+
157
+ # PyCharm
158
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
159
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
160
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
161
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
162
+ #.idea/