fnmatch patterns has preblem in diff

Aperta
#882 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
c, ruby
Ambito
tooling

Direzione di ricerca

Inizia eseguendo la riproduzione inline di Minitest e conferma il fallimento per il percorso con spazio finale. Poi segui il filtraggio dei percorsi attraverso l’estensione di Rugged e il confine con libgit2, usando le chiamate diff esistenti come punto di ingresso. Il lavoro è completato quando il test include la patch B e i casi senza filtro e con il match disabilitato continuano a passare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

When target file path has a space(eg: 'README.md '), Rugged::Tree.diff(..., paths: ['README.md ']).patches return empty array.
This should be a problem caused by the ext or libgit2, but I have not learn C language and I can't fix it.
Can you help me deal with it? Thanks.

Steps to reproduce

# frozen_string_literal: true

require 'bundler/inline'

gemfile(true) do
  source 'https://gems.ruby-china.com'

  gem 'minitest'
  gem 'rugged'
end

require 'minitest/autorun'
require 'rugged'

class DiffBugTest < Minitest::Test
  def setup
    author = committer = { name: 'foobar', email: 'foobar@test.com', time: Time.now }
    @repository = Rugged::Repository.init_at('/tmp/rugged_test_repository.git', true)

    @repository.index << { path: 'A', mode: 0o100644, oid: @repository.write('A file', :blob)}
    @repository.index << { path: 'B ', mode: 0o100644, oid: @repository.write('B file', :blob)} # NOTE: 'B ' path has a space
    @first_oid = Rugged::Commit.create(
      @repository,
      author: author,
      committer: committer,
      message: 'First commit',
      parents: [],
      tree: @repository.index.write_tree,
    )

    @repository.index << { path: 'A', mode: 0o100644, oid: @repository.write('Modified A file', :blob)}
    @repository.index << { path: 'B ', mode: 0o100644, oid: @repository.write('Modified B file', :blob)} # NOTE: 'B ' path has a space
    @second_oid = Rugged::Commit.create(
      @repository,
      author: author,
      committer: committer,
      message: 'Second commit',
      parents: [@first_oid],
      tree: @repository.index.write_tree,
    )
  end

  # NOTE: 'B ' path has a space
  def test_path_end_with_space
    # Success
    assert_equal 2, @repository.diff(@first_oid, @second_oid).patches.size
    assert_equal 2, @repository.diff(@first_oid, @second_oid, paths: ['A', 'B '], disable_pathspec_match: true).patches.size

    # Failure
    assert_equal 2, @repository.diff(@first_oid, @second_oid, paths: ['A', 'B ']).patches.size # => Missing 'B ' patch
  end
end

PS: English is not my native language; please excuse typing errors.

Lingua principale
C
Stelle
2.3k
Fork
293
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di libgit2/rugged

Tutte le issue di libgit2/rugged

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.