github.com/hawser/git-hawser@v2.5.2+incompatible/lfs/scanner_test.go (about)

     1  package lfs
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/git-lfs/git-lfs/filepathfilter"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  var (
    12  	pointerParseLogOutput = `lfs-commit-sha: 637908bf28b38ab238e1b5e6a5bfbfb2e513a0df 07d571b413957508679042e45508af5945b3f1e5
    13  
    14  diff --git a/smoke_1.png b/smoke_1.png
    15  deleted file mode 100644
    16  index 2fe5451..0000000
    17  --- a/smoke_1.png
    18  +++ /dev/null
    19  @@ -1,3 +0,0 @@
    20  -version https://git-lfs.github.com/spec/v1
    21  -oid sha256:8eb65d66303acc60062f44b44ef1f7360d7189db8acf3d066e59e2528f39514e
    22  -size 35022
    23  lfs-commit-sha: 07d571b413957508679042e45508af5945b3f1e5 8e5bd456b754f7d61c7157e82edc5ed124be4da6
    24  
    25  diff --git a/flare_1.png b/flare_1.png
    26  deleted file mode 100644
    27  index 1cfc5a1..0000000
    28  --- a/flare_1.png
    29  +++ /dev/null
    30  @@ -1,3 +0,0 @@
    31  -version https://git-lfs.github.com/spec/v1
    32  -ext-0-foo sha256:36485434f4f8a55150282ae7c78619a89de52721c00f48159f2562463df9c043
    33  -ext-1-bar sha256:382a2a13e705bbd8de7e2e13857c26551db17121ac57edca5dec9b5bd753e9c8
    34  -ext-2-ray sha256:423ee9e5988fb4670bf815990e9307c3b23296210c31581dec4d4ae89dabae46
    35  -oid sha256:ea61c67cc5e8b3504d46de77212364045f31d9a023ad4448a1ace2a2fb4eed28
    36  -size 72982
    37  diff --git a/radial_1.png b/radial_1.png
    38  index 9daa2e5..c648385 100644
    39  --- a/radial_1.png
    40  +++ b/radial_1.png
    41  @@ -1,3 +1,3 @@
    42   version https://git-lfs.github.com/spec/v1
    43  -oid sha256:334c8a0a520cf9f58189dba5a9a26c7bff2769b4a3cc199650c00618bde5b9dd
    44  -size 16849
    45  +oid sha256:3301b3da173d231f0f6b1f9bf075e573758cd79b3cfeff7623a953d708d6688b
    46  +size 3152388
    47  diff --git a/radial_2.png b/radial_2.png
    48  index 9daa2e5..c648385 100644
    49  --- a/radial_2.png
    50  +++ b/radial_2.png
    51  @@ -1,3 +1,3 @@
    52   version https://git-lfs.github.com/spec/v1
    53  -ext-0-foo sha256:36485434f4f8a55150282ae7c78619a89de52721c00f48159f2562463df9c043
    54  -ext-1-bar sha256:382a2a13e705bbd8de7e2e13857c26551db17121ac57edca5dec9b5bd753e9c8
    55  -ext-2-ray sha256:423ee9e5988fb4670bf815990e9307c3b23296210c31581dec4d4ae89dabae46
    56  -oid sha256:334c8a0a520cf9f58189dba5a9a26c7bff2769b4a3cc199650c00618bde5b9dd
    57  -size 16849
    58  +ext-0-foo sha256:95d8260e8365a9dfd39842bdeee9b20e0e3fe3daf9bb4a8c0a1acb31008ed7b4
    59  +ext-1-bar sha256:674bf4995720a43e03e174bcc1132ca95de6a8e4155fe3b2c482dceb42cbc0a5
    60  +ext-2-ray sha256:0d323c95ae4b0a9c195ddc437c470678bddd2ee0906fb2f7b8166cd2474e22d9
    61  +oid sha256:4b666195c133d8d0541ad0bc0e77399b9dc81861577a98314ac1ff1e9877893a
    62  +size 3152388
    63  lfs-commit-sha: 60fde3d23553e10a55e2a32ed18c20f65edd91e7 e2eaf1c10b57da7b98eb5d722ec5912ddeb53ea1
    64  
    65  diff --git a/1D_Noise.png b/1D_Noise.png
    66  new file mode 100644
    67  index 0000000..2622b4a
    68  --- /dev/null
    69  +++ b/1D_Noise.png
    70  @@ -0,0 +1,3 @@
    71  +version https://git-lfs.github.com/spec/v1
    72  +oid sha256:f5d84da40ab1f6aa28df2b2bf1ade2cdcd4397133f903c12b4106641b10e1ed6
    73  +size 1289
    74  diff --git a/waveNM.png b/waveNM.png
    75  new file mode 100644
    76  index 0000000..8519883
    77  --- /dev/null
    78  +++ b/waveNM.png
    79  @@ -0,0 +1,3 @@
    80  +version https://git-lfs.github.com/spec/v1
    81  +oid sha256:fe2c2f236b97bba4585d9909a227a8fa64897d9bbe297fa272f714302d86c908
    82  +size 125873
    83  lfs-commit-sha: 64b3372e108daaa593412d5e1d9df8169a9547ea e99c9cac7ff3f3cf1b2e670a64a5a381c44ffceb
    84  
    85  diff --git a/hobbit_5armies_2.mov b/hobbit_5armies_2.mov
    86  new file mode 100644
    87  index 0000000..92a88f8
    88  --- /dev/null
    89  +++ b/hobbit_5armies_2.mov
    90  @@ -0,0 +1,3 @@
    91  +version https://git-lfs.github.com/spec/v1
    92  +ext-0-foo sha256:b37197ac149950d057521bcb7e00806f0528e19352bd72767165bc390d4f055e
    93  +ext-1-bar sha256:c71772e5ea8e8c6f053f0f1dc89f8c01243975b1a040acbcf732fe2dbc0bcb61
    94  +oid sha256:ebff26d6b557b1416a6fded097fd9b9102e2d8195532c377ac365c736c87d4bc
    95  +size 127142413
    96  `
    97  )
    98  
    99  func TestLogScannerAdditionsNoFiltering(t *testing.T) {
   100  	r := strings.NewReader(pointerParseLogOutput)
   101  	scanner := newLogScanner(LogDiffAdditions, r)
   102  
   103  	// modification, + side
   104  	assertNextScan(t, scanner)
   105  	p := scanner.Pointer()
   106  	if assert.NotNil(t, p) {
   107  		assert.Equal(t, "radial_1.png", p.Name)
   108  		assert.Equal(t, "3301b3da173d231f0f6b1f9bf075e573758cd79b3cfeff7623a953d708d6688b", p.Oid)
   109  		assert.Equal(t, int64(3152388), p.Size)
   110  	}
   111  
   112  	// modification, + side with extensions
   113  	assertNextScan(t, scanner)
   114  	p = scanner.Pointer()
   115  	if assert.NotNil(t, p) {
   116  		assert.Equal(t, "radial_2.png", p.Name)
   117  		assert.Equal(t, "4b666195c133d8d0541ad0bc0e77399b9dc81861577a98314ac1ff1e9877893a", p.Oid)
   118  		assert.Equal(t, int64(3152388), p.Size)
   119  	}
   120  
   121  	// addition, + side
   122  	assertNextScan(t, scanner)
   123  	p = scanner.Pointer()
   124  	if assert.NotNil(t, p) {
   125  		assert.Equal(t, "1D_Noise.png", p.Name)
   126  		assert.Equal(t, "f5d84da40ab1f6aa28df2b2bf1ade2cdcd4397133f903c12b4106641b10e1ed6", p.Oid)
   127  		assert.Equal(t, int64(1289), p.Size)
   128  	}
   129  
   130  	// addition, + side
   131  	assertNextScan(t, scanner)
   132  	p = scanner.Pointer()
   133  	if assert.NotNil(t, p) {
   134  		assert.Equal(t, "waveNM.png", p.Name)
   135  		assert.Equal(t, "fe2c2f236b97bba4585d9909a227a8fa64897d9bbe297fa272f714302d86c908", p.Oid)
   136  		assert.Equal(t, int64(125873), p.Size)
   137  	}
   138  
   139  	// addition, + side with extensions
   140  	assertNextScan(t, scanner)
   141  	p = scanner.Pointer()
   142  	if assert.NotNil(t, p) {
   143  		assert.Equal(t, "hobbit_5armies_2.mov", p.Name)
   144  		assert.Equal(t, "ebff26d6b557b1416a6fded097fd9b9102e2d8195532c377ac365c736c87d4bc", p.Oid)
   145  		assert.Equal(t, int64(127142413), p.Size)
   146  	}
   147  
   148  	assertScannerDone(t, scanner)
   149  	assert.Nil(t, scanner.Pointer())
   150  }
   151  
   152  func TestLogScannerAdditionsFilterInclude(t *testing.T) {
   153  	r := strings.NewReader(pointerParseLogOutput)
   154  	scanner := newLogScanner(LogDiffAdditions, r)
   155  	scanner.Filter = filepathfilter.New([]string{"wave*"}, nil)
   156  
   157  	// addition, + side
   158  	assertNextScan(t, scanner)
   159  	p := scanner.Pointer()
   160  	if assert.NotNil(t, p) {
   161  		assert.Equal(t, "waveNM.png", p.Name)
   162  		assert.Equal(t, "fe2c2f236b97bba4585d9909a227a8fa64897d9bbe297fa272f714302d86c908", p.Oid)
   163  		assert.Equal(t, int64(125873), p.Size)
   164  	}
   165  	assertScannerDone(t, scanner)
   166  	assert.Nil(t, scanner.Pointer())
   167  }
   168  
   169  func TestLogScannerAdditionsFilterExclude(t *testing.T) {
   170  	r := strings.NewReader(pointerParseLogOutput)
   171  	scanner := newLogScanner(LogDiffAdditions, r)
   172  	scanner.Filter = filepathfilter.New(nil, []string{"wave*"})
   173  
   174  	// modification, + side
   175  	assertNextScan(t, scanner)
   176  	p := scanner.Pointer()
   177  	if assert.NotNil(t, p) {
   178  		assert.Equal(t, "radial_1.png", p.Name)
   179  		assert.Equal(t, "3301b3da173d231f0f6b1f9bf075e573758cd79b3cfeff7623a953d708d6688b", p.Oid)
   180  		assert.Equal(t, int64(3152388), p.Size)
   181  	}
   182  
   183  	// modification, + side with extensions
   184  	assertNextScan(t, scanner)
   185  	p = scanner.Pointer()
   186  	if assert.NotNil(t, p) {
   187  		assert.Equal(t, "radial_2.png", p.Name)
   188  		assert.Equal(t, "4b666195c133d8d0541ad0bc0e77399b9dc81861577a98314ac1ff1e9877893a", p.Oid)
   189  		assert.Equal(t, int64(3152388), p.Size)
   190  	}
   191  
   192  	// addition, + side
   193  	assertNextScan(t, scanner)
   194  	p = scanner.Pointer()
   195  	if assert.NotNil(t, p) {
   196  		assert.Equal(t, "1D_Noise.png", p.Name)
   197  		assert.Equal(t, "f5d84da40ab1f6aa28df2b2bf1ade2cdcd4397133f903c12b4106641b10e1ed6", p.Oid)
   198  		assert.Equal(t, int64(1289), p.Size)
   199  	}
   200  
   201  	// addition, + side with extensions
   202  	assertNextScan(t, scanner)
   203  	p = scanner.Pointer()
   204  	if assert.NotNil(t, p) {
   205  		assert.Equal(t, "hobbit_5armies_2.mov", p.Name)
   206  		assert.Equal(t, "ebff26d6b557b1416a6fded097fd9b9102e2d8195532c377ac365c736c87d4bc", p.Oid)
   207  		assert.Equal(t, int64(127142413), p.Size)
   208  	}
   209  
   210  	assertScannerDone(t, scanner)
   211  	assert.Nil(t, scanner.Pointer())
   212  }
   213  
   214  func TestLogScannerDeletionsNoFiltering(t *testing.T) {
   215  	r := strings.NewReader(pointerParseLogOutput)
   216  	scanner := newLogScanner(LogDiffDeletions, r)
   217  
   218  	// deletion, - side
   219  	assertNextScan(t, scanner)
   220  	p := scanner.Pointer()
   221  	if assert.NotNil(t, p) {
   222  		assert.Equal(t, "smoke_1.png", p.Name)
   223  		assert.Equal(t, "8eb65d66303acc60062f44b44ef1f7360d7189db8acf3d066e59e2528f39514e", p.Oid)
   224  		assert.Equal(t, int64(35022), p.Size)
   225  	}
   226  
   227  	// deletion, - side with extensions
   228  	assertNextScan(t, scanner)
   229  	p = scanner.Pointer()
   230  	if assert.NotNil(t, p) {
   231  		assert.Equal(t, "flare_1.png", p.Name)
   232  		assert.Equal(t, "ea61c67cc5e8b3504d46de77212364045f31d9a023ad4448a1ace2a2fb4eed28", p.Oid)
   233  		assert.Equal(t, int64(72982), p.Size)
   234  	}
   235  
   236  	// modification, - side
   237  	assertNextScan(t, scanner)
   238  	p = scanner.Pointer()
   239  	if assert.NotNil(t, p) {
   240  		assert.Equal(t, "radial_1.png", p.Name)
   241  		assert.Equal(t, "334c8a0a520cf9f58189dba5a9a26c7bff2769b4a3cc199650c00618bde5b9dd", p.Oid)
   242  		assert.Equal(t, int64(16849), p.Size)
   243  	}
   244  
   245  	// modification, - side with extensions
   246  	assertNextScan(t, scanner)
   247  	p = scanner.Pointer()
   248  	if assert.NotNil(t, p) {
   249  		assert.Equal(t, "radial_2.png", p.Name)
   250  		assert.Equal(t, "334c8a0a520cf9f58189dba5a9a26c7bff2769b4a3cc199650c00618bde5b9dd", p.Oid)
   251  		assert.Equal(t, int64(16849), p.Size)
   252  	}
   253  
   254  	assertScannerDone(t, scanner)
   255  }
   256  
   257  func TestLogScannerDeletionsFilterInclude(t *testing.T) {
   258  	r := strings.NewReader(pointerParseLogOutput)
   259  	scanner := newLogScanner(LogDiffDeletions, r)
   260  	scanner.Filter = filepathfilter.New([]string{"flare*"}, nil)
   261  
   262  	// deletion, - side with extensions
   263  	assertNextScan(t, scanner)
   264  	p := scanner.Pointer()
   265  	if assert.NotNil(t, p) {
   266  		assert.Equal(t, "flare_1.png", p.Name)
   267  		assert.Equal(t, "ea61c67cc5e8b3504d46de77212364045f31d9a023ad4448a1ace2a2fb4eed28", p.Oid)
   268  		assert.Equal(t, int64(72982), p.Size)
   269  	}
   270  
   271  	assertScannerDone(t, scanner)
   272  }
   273  
   274  func TestLogScannerDeletionsFilterExclude(t *testing.T) {
   275  	r := strings.NewReader(pointerParseLogOutput)
   276  	scanner := newLogScanner(LogDiffDeletions, r)
   277  	scanner.Filter = filepathfilter.New(nil, []string{"flare*"})
   278  
   279  	// deletion, - side
   280  	assertNextScan(t, scanner)
   281  	p := scanner.Pointer()
   282  	if assert.NotNil(t, p) {
   283  		assert.Equal(t, "smoke_1.png", p.Name)
   284  		assert.Equal(t, "8eb65d66303acc60062f44b44ef1f7360d7189db8acf3d066e59e2528f39514e", p.Oid)
   285  		assert.Equal(t, int64(35022), p.Size)
   286  	}
   287  
   288  	// modification, - side
   289  	assertNextScan(t, scanner)
   290  	p = scanner.Pointer()
   291  	if assert.NotNil(t, p) {
   292  		assert.Equal(t, "radial_1.png", p.Name)
   293  		assert.Equal(t, "334c8a0a520cf9f58189dba5a9a26c7bff2769b4a3cc199650c00618bde5b9dd", p.Oid)
   294  		assert.Equal(t, int64(16849), p.Size)
   295  	}
   296  
   297  	// modification, - side with extensions
   298  	assertNextScan(t, scanner)
   299  	p = scanner.Pointer()
   300  	if assert.NotNil(t, p) {
   301  		assert.Equal(t, "radial_2.png", p.Name)
   302  		assert.Equal(t, "334c8a0a520cf9f58189dba5a9a26c7bff2769b4a3cc199650c00618bde5b9dd", p.Oid)
   303  		assert.Equal(t, int64(16849), p.Size)
   304  	}
   305  
   306  	assertScannerDone(t, scanner)
   307  }
   308  
   309  func TestLsTreeParser(t *testing.T) {
   310  	stdout := "100644 blob d899f6551a51cf19763c5955c7a06a2726f018e9      42	.gitattributes\000100644 blob 4d343e022e11a8618db494dc3c501e80c7e18197     126	PB SCN 16 Odhrán.wav"
   311  	scanner := newLsTreeScanner(strings.NewReader(stdout))
   312  
   313  	assertNextTreeBlob(t, scanner, "d899f6551a51cf19763c5955c7a06a2726f018e9", ".gitattributes")
   314  	assertNextTreeBlob(t, scanner, "4d343e022e11a8618db494dc3c501e80c7e18197", "PB SCN 16 Odhrán.wav")
   315  	assertScannerDone(t, scanner)
   316  }
   317  
   318  func assertNextTreeBlob(t *testing.T, scanner *lsTreeScanner, oid, filename string) {
   319  	assertNextScan(t, scanner)
   320  	b := scanner.TreeBlob()
   321  	assert.NotNil(t, b)
   322  	assert.Equal(t, oid, b.Sha1)
   323  	assert.Equal(t, filename, b.Filename)
   324  }
   325  
   326  func BenchmarkLsTreeParser(b *testing.B) {
   327  	stdout := "100644 blob d899f6551a51cf19763c5955c7a06a2726f018e9      42	.gitattributes\000100644 blob 4d343e022e11a8618db494dc3c501e80c7e18197     126	PB SCN 16 Odhrán.wav"
   328  
   329  	// run the Fib function b.N times
   330  	for n := 0; n < b.N; n++ {
   331  		scanner := newLsTreeScanner(strings.NewReader(stdout))
   332  		for scanner.Scan() {
   333  		}
   334  	}
   335  }