Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [WIP] Force add a file that is in an ignored subdirectory by jdblischak · Pull Request #290 · ropensci/git2r · GitHub
Skip to content

[WIP] Force add a file that is in an ignored subdirectory - #290

Open
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir
Open

[WIP] Force add a file that is in an ignored subdirectory#290
jdblischak wants to merge 1 commit into
ropensci:mainfrom
jdblischak:force-add-subdir

Conversation

@jdblischak

Copy link
Copy Markdown
Contributor

Motivation

A common setup I use for my Git repositories is to ignore entire directories which contain many files that I do not want to commit, e.g. subdirectories with data or figure files. Ignoring these directories prevents me from accidentally committing them and makes the output of git status less cluttered. However, I often want to commit a few files from these ignored subdirectories, e.g. a small data file with summary statistics or the final version of a figure I want to share. This is possible with Git, e.g.

$ cat .gitignore
data/
$ git add -f data/summary.txt

Problem

I am unable to force add a file in an ignored subdirectory with git2r::add(). Using the example above, git2r::add("data/summary.txt", force = TRUE) does not force add the file, nor does it throw a warning or error. It behaves the same as if force = FALSE.

What's currently in this PR

I haven't been able to figure out how to implement this myself, but to assist in developing a solution, I've added unit tests that currently fail but should pass if the behavior is implemented.

Researching potential solutions

PR #148 was the original request for force adding files, and commit 7ccb202 implemented the functionality. However, the focus was on ignored files, and not ignored subdirectories.

I have been trying to determine if this is a fundamental limitation of libgit2. The libgit2 docs for git_index_add_all discuss force adding specific files with the GIT_INDEX_ADD_FORCE flag, but do not discuss this specific use case. Looking at the Python API for libgit2, pygit2, it appears that they do not support force adding at all (source code, search results of online documentation), so that's not informative. The Lua API, luagit2, also appears to not handle ignored files, instead recommending that this be implemented manually: "This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this."

This issue is potentially related: libgit2/libgit2#3535 (comment) At the very least it demonstrates an example where Git and libgit2 differ in their interpretation of the .gitingore file.

Would it be possible to implement this functionality in git2r either by modifying the call to libgit2 or instead adding a custom check via a call to git2r::status()?

Signed-off-by: John Blischak <jdblischak@gmail.com>
@stewid

Copy link
Copy Markdown
Member

Sorry for the late reply.
Thanks for finding this and creating the test case. I think this is a missing corner case in libgit2. Maybe it works in the next version of libgit2.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

No worries @stewid! I did a lot of searching, so I figured there wasn't any easy solution.

Conceptually to me at least it is similar to the all_untracked option added in git2r 0.16.0. Instead of status reporting an ignored subdirectory, it needs to recognize that there are individual ignored files in that subdirectory.

@stewid

Copy link
Copy Markdown
Member

That's a good point, maybe it's possible to check status of untracked files before and after .Call(git2r_index_add_all, repo, path, isTRUE(force)) to determine if there are untracked files that should be added. I'm working on another problem in the add method so maybe if I can fix this at the same time.

@jdblischak

Copy link
Copy Markdown
ContributorAuthor

Here's a related Issue in the upstream libgit2 tracker: libgit2/libgit2#4377

It appears to be documenting the same behavior, i.e. that libgit2 can't force add a file inside of an ignored subdirectory.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@jdblischak@stewid