Skip to content

Commit 7895c4a

Browse files
Add logging support
1 parent 81a2ee4 commit 7895c4a

File tree

8 files changed

+65
-30
lines changed

8 files changed

+65
-30
lines changed

cpp_dependency_graph.gemspec

+14-14
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@ Gem::Specification.new do |s|
2525
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
2626
s.require_paths = ['lib']
2727

28-
s.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
29-
s.rubygems_version = '3.1.2'
28+
s.required_ruby_version = Gem::Requirement.new('>= 3.1.0')
29+
s.rubygems_version = '3.3.4'
3030

31-
s.add_runtime_dependency 'docopt', '~> 0.6'
32-
s.add_runtime_dependency 'json', '~> 2.3.0'
33-
s.add_runtime_dependency 'ruby-graphviz', '~> 1.2'
31+
s.add_runtime_dependency 'docopt'
32+
s.add_runtime_dependency 'json'
33+
s.add_runtime_dependency 'ruby-graphviz'
3434

35-
s.add_development_dependency 'bundler', '~> 2.1'
36-
s.add_development_dependency 'debase', '~> 0.2'
37-
s.add_development_dependency 'rake', '~> 13.0'
38-
s.add_development_dependency 'rspec', '~> 3.9'
39-
s.add_development_dependency 'rubocop', '~> 0.81'
40-
s.add_development_dependency 'ruby-debug-ide', '~> 0.7'
41-
s.add_development_dependency 'ruby-prof', '~> 0.18'
42-
s.add_development_dependency 'simplecov', '~> 0.18'
43-
s.add_development_dependency 'simplecov-console', '~> 0.4'
35+
s.add_development_dependency 'bundler'
36+
s.add_development_dependency 'rake'
37+
s.add_development_dependency 'rspec'
38+
s.add_development_dependency 'rubocop'
39+
s.add_development_dependency 'rufo'
40+
s.add_development_dependency 'ruby-debug-ide'
41+
s.add_development_dependency 'ruby-prof'
42+
s.add_development_dependency 'simplecov'
43+
s.add_development_dependency 'simplecov-console'
4444
end

lib/cpp_dependency_graph.rb

+19-12
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
# frozen_string_literal: true
22

3-
require_relative 'cpp_dependency_graph/circle_packing_visualiser'
4-
require_relative 'cpp_dependency_graph/component_dependency_graph'
5-
require_relative 'cpp_dependency_graph/dir_tree'
6-
require_relative 'cpp_dependency_graph/graph_to_html_visualiser'
7-
require_relative 'cpp_dependency_graph/graph_to_svg_visualiser'
8-
require_relative 'cpp_dependency_graph/include_component_dependency_graph'
9-
require_relative 'cpp_dependency_graph/include_file_dependency_graph'
10-
require_relative 'cpp_dependency_graph/project'
11-
require_relative 'cpp_dependency_graph/version'
3+
require_relative "cpp_dependency_graph/circle_packing_visualiser"
4+
require_relative "cpp_dependency_graph/component_dependency_graph"
5+
require_relative "cpp_dependency_graph/dir_tree"
6+
require_relative "cpp_dependency_graph/graph_to_html_visualiser"
7+
require_relative "cpp_dependency_graph/graph_to_svg_visualiser"
8+
require_relative "cpp_dependency_graph/include_component_dependency_graph"
9+
require_relative "cpp_dependency_graph/include_file_dependency_graph"
10+
require_relative "cpp_dependency_graph/project"
11+
require_relative "cpp_dependency_graph/version"
12+
require_relative "cpp_dependency_graph/logging"
1213

1314
# Generates dependency graphs of a project in various output forms
1415
module CppDependencyGraph
16+
include Logging
17+
1518
def generate_project_graph(project_dir, format, output_file)
19+
logger.info "Resolving source directories in project..."
1620
project = Project.new(project_dir)
21+
logger.info "Resolving dependencies between components..."
1722
graph = ComponentDependencyGraph.new(project)
23+
logger.info "Generating graph..."
1824
deps = graph.all_links
25+
logger.info "Generating visualisation..."
1926
generate_visualisation(deps, format, output_file)
2027
end
2128

@@ -63,11 +70,11 @@ def generate_cyclic_dependencies(project_dir, format, file)
6370

6471
def generate_visualisation(deps, format, file)
6572
case format
66-
when 'svg'
73+
when "svg"
6774
GraphToSvgVisualiser.new.generate(deps, file)
68-
when 'html'
75+
when "html"
6976
GraphToHtmlVisualiser.new.generate(deps, file)
70-
when 'json'
77+
when "json"
7178
File.write(file, JSON.pretty_generate(deps))
7279
end
7380
end

lib/cpp_dependency_graph/component_dependency_graph.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def links(name)
2929
private
3030

3131
def build_hash_links
32-
raw_links = @project.source_components.values.map { |c| [c.name, @project.dependencies(c)] }.to_h
32+
raw_links = @project.source_components.values.map { |c| [c.name, @project.dependencies(c) || [] ] }.to_h
3333
@cycle_detector ||= CycleDetector.new(raw_links)
3434
links = raw_links.map do |source, source_links|
3535
c_links = source_links.map { |target| Link.new(source, target, @cycle_detector.cyclic?(source, target)) }

lib/cpp_dependency_graph/cycle_detector.rb

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
# frozen_string_literal: true
22

3-
require_relative 'cyclic_link'
3+
require_relative "cyclic_link"
4+
require_relative "logging"
45

56
# Detects cycles between nodes
67
class CycleDetector
8+
include Logging
9+
710
def initialize(links)
11+
logger.debug "Resolving cyclic dependendencies..."
812
@cyclic_links = links.flat_map do |source, source_links|
9-
source_links.select { |target| links[target].include?(source) }.map do |target|
13+
logger.debug "#{source}, #{source_links}"
14+
source_links.select { |target| links.fetch(target, []).include?(source) }.map do |target|
1015
[CyclicLink.new(source, target), true]
1116
end
1217
end.to_h

lib/cpp_dependency_graph/directory_parser.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Utility methods for parsing directories
44
module DirectoryParser
55
def fetch_all_dirs(root_dir)
6-
Find.find(root_dir).select { |e| File.directory?(e) && e != root_dir }
6+
Find.find(root_dir).select { |e| File.directory?(e) && e != root_dir}
77
end
88

99
def glob_files(path, extensions)

lib/cpp_dependency_graph/logging.rb

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
require "logger"
2+
3+
module Logging
4+
def logger
5+
Logging.logger
6+
end
7+
8+
def self.logger
9+
@logger ||= initialise_logger
10+
end
11+
12+
def self.initialise_logger
13+
logger = Logger.new(STDOUT, level: :info)
14+
logger.formatter = proc do |severity, datetime, progname, msg|
15+
date_format = datetime.strftime("%Y-%m-%d %H:%M:%S.%L")
16+
"[#{date_format}] #{severity}: #{msg}\n"
17+
end
18+
logger
19+
end
20+
end

lib/cpp_dependency_graph/project.rb

+3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
require_relative 'directory_parser'
66
require_relative 'include_to_component_resolver'
77
require_relative 'source_component'
8+
require_relative 'logging'
89

910
# Parses all components of a project
1011
class Project
1112
include DirectoryParser
13+
include Logging
1214

1315
def initialize(path)
1416
@path = path
@@ -61,6 +63,7 @@ def build_source_components
6163
# TODO: Dealing with source components with same dir name?
6264
dirs = fetch_all_dirs(@path)
6365
components = dirs.map do |dir|
66+
logger.debug "Parsing #{dir}"
6467
c = SourceComponent.new(dir)
6568
[c.name, c]
6669
end.to_h

spec/test/example_project/.hidden/dummy

Whitespace-only changes.

0 commit comments

Comments
 (0)