Class: Ace::GitCommit::Atoms::GitignoreChecker
- Inherits:
-
Object
- Object
- Ace::GitCommit::Atoms::GitignoreChecker
- Defined in:
- lib/ace/git_commit/atoms/gitignore_checker.rb
Overview
GitignoreChecker detects files that match gitignore patterns Uses git check-ignore to determine if paths are ignored
Instance Method Summary collapse
-
#categorize_paths(paths, git_executor) ⇒ Hash
Categorize paths into: valid (not gitignored), force_add (gitignored but tracked), skipped (gitignored and untracked).
-
#filter_ignored(paths, git_executor) ⇒ Hash
Legacy method for backward compatibility.
-
#ignored?(path, git_executor) ⇒ Boolean
Check if a single file/path is gitignored.
-
#tracked?(path, git_executor) ⇒ Boolean
Check if a file is tracked in git (exists in the index).
Instance Method Details
#categorize_paths(paths, git_executor) ⇒ Hash
Categorize paths into: valid (not gitignored), force_add (gitignored but tracked), skipped (gitignored and untracked)
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/ace/git_commit/atoms/gitignore_checker.rb', line 37 def categorize_paths(paths, git_executor) return {valid: [], force_add: [], skipped: []} if paths.nil? || paths.empty? valid = [] force_add = [] skipped = [] paths.each do |path| result = check_ignore(path, git_executor) if result[:ignored] # Path matches gitignore - check if it's tracked if tracked?(path, git_executor) # Tracked file in gitignored location - force add it force_add << {path: path, pattern: result[:pattern]} else # Untracked and gitignored - skip it skipped << {path: path, pattern: result[:pattern]} end else valid << path end end {valid: valid, force_add: force_add, skipped: skipped} end |
#filter_ignored(paths, git_executor) ⇒ Hash
Legacy method for backward compatibility
67 68 69 70 71 72 73 |
# File 'lib/ace/git_commit/atoms/gitignore_checker.rb', line 67 def filter_ignored(paths, git_executor) result = categorize_paths(paths, git_executor) { valid: result[:valid] + result[:force_add].map { |f| f[:path] }, ignored: result[:skipped] } end |
#ignored?(path, git_executor) ⇒ Boolean
Check if a single file/path is gitignored
13 14 15 16 |
# File 'lib/ace/git_commit/atoms/gitignore_checker.rb', line 13 def ignored?(path, git_executor) result = check_ignore(path, git_executor) result[:ignored] end |
#tracked?(path, git_executor) ⇒ Boolean
Check if a file is tracked in git (exists in the index)
22 23 24 25 26 27 28 |
# File 'lib/ace/git_commit/atoms/gitignore_checker.rb', line 22 def tracked?(path, git_executor) # git ls-files returns the path if it's tracked, empty if not result = git_executor.execute("ls-files", "--error-unmatch", path) !result.nil? && !result.strip.empty? rescue GitError false end |