Code Monkey home page Code Monkey logo

gitgutter's Introduction

GitGutter

A Sublime Text plug-in to show information about files in a git repository:

  1. Gutter Icons indicating inserted, modified or deleted lines
  2. Diff Popup with details about modified lines
  3. Status Bar Text with information about file and repository

and provides some commands like:

  1. Goto Change to navigate between modified lines
  2. Copy from Commit to copy the original content from the commit
  3. Revert to Commit to revert a modified hunk to the original state in a commit

Gutter Icons & Status Bar Text

screenshot

The icons of the default theme have the following meaning:

Icon Description
inserted inserted line
changed modified line
deleted deleted region borders
ignored ignored file
untracked untracked file

Diff Popup

The diff popup shows the original content from the commit or the differences between it and the working content.

diff_popup_screenshot

The toolbar provides some commands to interact with or modify the changes.

symbol meaning of the symbol
× close the popup
goto to first change
goto to previous change
goto to next change
≈, ≉ enable/disable difference highlighting
copy the original content from the commit
revert a modified hunk to the original state in a commit

Documentation

Please read https://jisaacks.github.io/GitGutter/ for detailed information about

gitgutter's People

Contributors

airato avatar alexruf avatar alisey avatar archydragon avatar arnie97 avatar bbrks avatar brunosabot avatar christinwhite avatar codeheroics avatar cristinecula avatar davidlgoldberg avatar deathaxe avatar divmain avatar druellan avatar edelvalle avatar fogleman avatar genezys avatar id25 avatar jisaacks avatar johnburnett avatar kevinli avatar natecavanaugh avatar neilcresswell avatar pictor13 avatar r-stein avatar razerm avatar rcopera avatar shmup avatar statik213 avatar wuub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gitgutter's Issues

Bookmark icon is covered by Gutter

Might be not really a bug though,..
If I try adding bookmark in the same line where Gutter highlights, there would be no response of bookmarks. I suppose the space at a line start can only hold one icon. While there are two, they just conflct.
Then there's a problem: I can't tell from the line wether there's a bookmark, that's annoying.

Running over gvfs produces extreme blocking / lag

I edit all of my files via a local installation of Sublime 2 over a GVFS mounted SSH share on a remote server. When this plugin is installed, all file editing slows to a crawl, and the UI of Sublime locks up for 30-60 seconds at a time. This is not a slow SSH connection.

I suspect this is partly related to Sublime 2 having various blocking issues (for example, I also suffer from a painfully blocked UI when I am saving a large file), but is painfully noticed with this plugin.

Encoding lookup error

Hi. i got an error on some files

Writing file /C/Users/kubatkin/Documents/ggt/utfwbom.txt with encoding UTF-8 with BOM
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 395, in run_
    return self.run()
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\git_gutter.py", line 27, in run
    inserted, modified, deleted = ViewCollection.diff(self.view)
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\view_collection.py", line 36, in diff
    return ViewCollection.views[key].diff()
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\git_gutter_handler.py", line 128, in diff
    self.update_buf_file()
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\git_gutter_handler.py", line 49, in update_buf_file
    contents = self.view.substr(region).encode(encoding.replace(' ', ''))
LookupError: unknown encoding: UTF-8withBOM

same problem with some other encodings

Writing file /C/Users/kubatkin/Documents/ggt/utfwbom.txt with encoding Western (Windows 1252)
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 395, in run_
    return self.run()
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\git_gutter.py", line 27, in run
    inserted, modified, deleted = ViewCollection.diff(self.view)
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\view_collection.py", line 36, in diff
    return ViewCollection.views[key].diff()
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\git_gutter_handler.py", line 128, in diff
    self.update_buf_file()
  File "C:\Users\kubatkin\AppData\Roaming\Sublime Text 3\Packages\GitGutter\git_gutter_handler.py", line 49, in update_buf_file
    contents = self.view.substr(region).encode(encoding.replace(' ', ''))
LookupError: unknown encoding: Windows1252

To reproduce you need to "save file with encoding".
Tested with ST2/ST3 on win7 64.

The reason for this is that view.encoding() returns "human readable" name of encoding, I think. Valid encoding names you can see here http://docs.python.org/2/library/codecs.html#standard-encodings

ViewCollection has no attribute 'git_files'

I get an error on all my git repositories. ViewCollection has no attribute 'git_files', or ViewCollection has no attribute 'git_tmp_file'

Any idea?

Thanks

  File "./sublime_plugin.py", line 205, in on_activated
  File "./sublime_plugin.py", line 154, in run_timed_function
  File "./sublime_plugin.py", line 204, in <lambda>
  File "./git_gutter_events.py", line 21, in on_activated
  File "./view_collection.py", line 18, in add
  File "./git_gutter_handler.py", line 17, in __init__
  File "./view_collection.py", line 53, in git_tmp_file
AttributeError: class ViewCollection has no attribute 'git_files'
  File "./sublime_plugin.py", line 195, in on_modified
  File "./sublime_plugin.py", line 154, in run_timed_function
  File "./sublime_plugin.py", line 194, in <lambda>
  File "./git_gutter_events.py", line 12, in on_modified
  File "./view_collection.py", line 18, in add
  File "./git_gutter_handler.py", line 17, in __init__
  File "./view_collection.py", line 53, in git_tmp_file
AttributeError: class ViewCollection has no attribute 'git_files'

git_gutter_change not found

When loading ST3.
I've installed trough git clone, not package control. With package control the plugin has issues with decoding the graphics.

reloading plugin GitGutter.git_gutter_change
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 72, in reload_plugin
    m = importlib.import_module(modulename)
  File "X/importlib/__init__.py", line 88, in import_module
  File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1522, in _find_and_load_unlocked
ImportError: No module named 'GitGutter.git_gutter_change'

Set `non_blocking` to true by default

One of Sublime Text 3's main features is asynchronous plugins. In addition, one doesn't need Git diff changes immediately after modifying the file, so why isn't non_blocking set to true by default?

Plugin breaks undo

After installing GitGutter I've noticed that the undo feature breaks normal behavior.

If I write some text and try to undo it, instead of removing the whole text it removes one letter at a time.

To reproduce:
Write some text
Hit undo.
Notice behavior.
Install GitGutter
Write some text
Hit undo.
Notice the different behavior

This was tested on a Mac.

ST3: Unable to decode error messages

I'm getting this for all the icons

Unable to decode Packages/Theme - Default/../GitGutter/icons/inserted.png

Which was referenced here #37 (comment) and said to be fixed in pull request #40

GitGutter is installed in Installed Packages/GitGutter.sublime-package by Package Control not in Packages

Sublime Text 3 - Build 3012
GitGutter - 2012.02.21.22.04.01

Support Cygwin

I use git.exe from Cygwin which handler path in UNIX style. So in order to make it work, GitGutter need convert the path into Windows style.

Here it's an example to show how to handle the path.

But unfortunately I don't know where to put the codes into the GitGutter, I hope you can use this to solve the problem.

There is a flicker now when a lines are added/removed

The fix to the undo problem was to set a timeout for it to run a short period of time after a modification instead of instantly.

This time delay causes a flicker when added or removing lines.

This flicker is bothering me.

Break initializing after updating git_gutter_handler.py

Hello

I try to install Your package through git clone ...
And when Sublime starts I see in the console the following text

Reloading plugin /home/vaska/.config/sublime-text-2/Packages/GitGutter/git_gutter_handler.py
Traceback (most recent call last):
  File "./sublime_plugin.py", line 62, in reload_plugin
  File "./git_gutter_handler.py", line 44
    break
SyntaxError: 'break' outside loop

and then

Traceback (most recent call last):
  File "./sublime_plugin.py", line 205, in on_activated
  File "./sublime_plugin.py", line 154, in run_timed_function
  File "./sublime_plugin.py", line 204, in <lambda>
  File "./git_gutter_events.py", line 18, in on_activated
  File "./view_collection.py", line 14, in add
ImportError: No module named git_gutter_handler

I noticed that last commit aebe451 updates git_gutter_handler.py. I checkout to previous commit and it works well for me: the package loads and changes are shown. It seems that something is wrong in last commit.

If some more details about system and versions are needed please inform me.

Thanks

vs Modific

It would be awesome if you could add some notes to the README for why you would want to use this rather than Modific

It's always helpful to see recognition for other similar packages ... and the reason behind making new packages that are similar to existing ones.

Thanks!

'+' wont change color

I can not get the + icon to change color even after updating the theme. I can faintly see the + but trying to change the color to #FFFFFF yields no result.

Here is my .tmTheme

Any thoughts?
NZ

Original data on hover over gutter icons

Feature request.

Would be very helpful to see the original code (before the modification) when hovering over the relevant change icon in the gutter. Eclipse Git plugin does this very well, where it overlays the original change over the current change, so you can see it inline with the rest of the code. This could be a setting, specifying where/how the data is displayed.

sublime2-gitgutter-overlay

Error trying to parse file

After initial install, I restarted Sublime Text 2 and was greeted with this pop up error.

Error trying to parse file: No data in ~/Library/Application Support/Sublime Text 2/Packages/SideBarEnhancements/Default (OSX).sublime-keymap:1:1

"Edited" Marking is too aggressive

Any time that changes are added which "spill over" a line into an existing line causes a line of new code or deleted code to become treated in an "Edited" line.

Granted, the presence of a dynamic marker that points out that changes are there is invaluable (and is what makes this plugin indispensable), but I am certain that the algorithm for determining the marker type could use some work.

As it is now, almost all changes end up showing up as the square, and it isn't really intuitively indicative of what's changed.

For example, if I have a Javascript array or hash with a list of functions inside it, and as part of the current session of work I insert 300 lines of new code into the collection of functions at the bottom of it, it is a certainty that the entire 300 lines of additional code will be marked as "Edited" with the square rather than "Added" marked with the plus marker.

The reason for this seems to be that GitGutter recognizes that (for instance) the last item has had a comma appended to it, and then the region following that of 300 lines of new code is somehow also grouped together into this "Edit".

If I instead put the comma on a new line, and my new changes after that, then they all show up green because the diff has ascertained that there are no "edited" line groups in that region.

Yeah, okay, I edited that one line and then added 300 more lines. I should at most see one square markers and 300 plus markers. I shouldn't have to make nasty formatting changes to gain that insight, and I think it's more correct anyways to have it display the square for that one line where I inserted that comma.

I think the fix is probably pretty simple. I hope it is.

Windows compatibility

I tried to tweak the code in order to make it compatible with Windows.

I found 3 blocking issues on Windows :

  1. temporary files are actually open when you get them from NamedTemporaryFile so opening them a second throws an exception
  2. Git & Diff commands display a command prompt when running
  3. The git show command does not accept the initial /

The availability of the git & diff command could also be an issue but a good Git/Cygwin configuration can get you that.

https://github.com/genezys/GitGutter/commit/c1b969854db115708744a9a6bfae8eacc7be6b1d
https://github.com/genezys/GitGutter/commit/0d6adb36af28b2097547d0b747879f335fef2470

This code is not yet tested on Mac OS X or Linux as I have not access to these platforms right now.

ZipImportError: bad local file header

From ST3 (3022) console:

reloading plugin GitGutter.git_gutter
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 70, in reload_plugin
    m = imp.reload(m)
  File "X/imp.py", line 252, in reload
zipimport.ZipImportError: bad local file header in C:\Users\Enzy\AppData\Roaming\Sublime Text 3\Installed Packages\GitGutter.sublime-package
reloading plugin GitGutter.git_gutter_change
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 70, in reload_plugin
    m = imp.reload(m)
  File "X/imp.py", line 252, in reload
zipimport.ZipImportError: bad local file header in C:\Users\Enzy\AppData\Roaming\Sublime Text 3\Installed Packages\GitGutter.sublime-package
reloading plugin GitGutter.git_gutter_events
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 70, in reload_plugin
    m = imp.reload(m)
  File "X/imp.py", line 252, in reload
zipimport.ZipImportError: bad local file header in C:\Users\Enzy\AppData\Roaming\Sublime Text 3\Installed Packages\GitGutter.sublime-package
reloading plugin GitGutter.git_gutter_handler
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 70, in reload_plugin
    m = imp.reload(m)
  File "X/imp.py", line 252, in reload
zipimport.ZipImportError: bad local file header in C:\Users\Enzy\AppData\Roaming\Sublime Text 3\Installed Packages\GitGutter.sublime-package
reloading plugin GitGutter.git_helper
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 70, in reload_plugin
    m = imp.reload(m)
  File "X/imp.py", line 252, in reload
zipimport.ZipImportError: bad local file header in C:\Users\Enzy\AppData\Roaming\Sublime Text 3\Installed Packages\GitGutter.sublime-package
reloading Packages/GitGutter/GitGutter.sublime-settings
reloading plugin GitGutter.view_collection
Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 70, in reload_plugin
    m = imp.reload(m)
  File "X/imp.py", line 252, in reload
zipimport.ZipImportError: bad local file header in C:\Users\Enzy\AppData\Roaming\Sublime Text 3\Installed Packages\GitGutter.sublime-package

live mode doesn't work

It does work for me on 643fc48, but at that commit I need to fix up files to get it to look right.

I was trying to get the new retina icons (which are fixed in latest)... But I want live mode back.

It does update if I switch to a different buffer/file and come back, but that's not good enough!

doesn't work for me

I like git-gutter, but it doesn't seem to work with org-mode for me.

GNU Emacs 24.3.50.1 (x86_64-suse-linux-gnu, GTK+ Version 2.22.1) of 2013-03-01 on melissa
Org-mode version 8.0-pre (release_8.0-pre @ /home/taupan/lib/emacs/org-mode/lisp/)

'(global-git-gutter-mode t)

If you need more information to reproduce this problem, plese feel free to ask!

Gutter icons not showing

I currently just see a block of color in my gutter, not the icons, when a change is made to a line.

I've tried disabling other plugins that make use of the gutter (bracketer, change tracker) and restarting Sublime Text, but I still do not see the icons, just an orange-scanline box (image attached).
Screen Shot 2012-12-12 at 10 47 43 AM

Save buffer to correct encoding

If you change encoding for file in sublime text config, when all line with non-ascii characters are marked as modified

I fix with with this code

    # get encoding and clean it for python ex: "Western (ISO 8859-1)"
    pattern = re.compile(r'.+\((.*)\)')
    encoding = self.view.encoding()

    if pattern.match(encoding):
        encoding = pattern.sub(r'\1', self.view.encoding())

    # Try conversion
try:
        contents = self.view.substr(region).encode(encoding.replace(' ', ''))
        break
except UnicodeError:
            # Fallback to utf8-encoding
    contents = self.view.substr(region).encode('utf-8')

instead of
contents = self.view.substr(region).encode('utf-8')

In function update_buf_file in git_gutter_handler.py

New lines wrongly marked as changed

Hi, thanks for GitGutter, I'm impressed with how responsive it is.

There's an issue with the diffs on my machine where new lines show up as changed if an adjacent line is also changed.

For example, if I insert to lines with no other changes, then things look right (I need to tweak the colour):

http://d.pr/mZKy

But then if I change an adjacent line, those new ones are also shown as 'changed':

http://d.pr/sAea

Changed lines icons are … borked?

It looks the the icon might be corrupt?

Screen Shot 2012-12-13 at 10 49 43 AM

The add line icon shows up great, the diff color settings are in my theme file… any other data I can provide?

Windows installation

The installation document should mention that GitGutter only works on Windows system if the PATH environment variable contains ..\Git\cmd (which contains git.exe) and ..\Git\bin (containing diff.exe) folder.
Since the Git installer for windows does not automatically add both paths, the ..\Git\bin has to be added manually to the PATH environment variable in order to get GitGutter working.

Add color highlights to the mini map

Is it possible to add green/yellow/red highlights of the diff lines to the Sublime Text mini map? This would make it much easier to see where changes in the file are and scroll to them quickly.

Plugin not functional on windows

On my console I have the following errors:

Traceback (most recent call last):
  File ".\sublime_plugin.py", line 339, in run_
  File ".\git_gutter.py", line 11, in run
    inserted, modified, deleted = ViewCollection.diff(self.view)
  File ".\view_collection.py", line 33, in diff
    return ViewCollection.views[key].diff()
  File ".\git_gutter_handler.py", line 114, in diff
    results = self.run_command(args)
  File ".\git_gutter_handler.py", line 125, in run_command
    startupinfo=startupinfo)
  File ".\subprocess.py", line 633, in __init__
  File ".\subprocess.py", line 842, in _execute_child
WindowsError: [Error 2] The system cannot find the file specified

Edit: Sorry, I manually added C:\Program Files (x86)\Git\bin to my paths.

icons stay as changed (even when file was not modified)

Hi,

After installing the package GitGutter through package control, the icons appear like in the image. All lines appear as modified status and don't change to any other status if I modify the file.

gitguttericons

(I restarted sublime, I reinstalled the package and tried git clone, but everything stayed the same)

Add a preference for 'git' location.

On OSX using Homebrew my git location is /usr/local/bin/git. it's in my actual bash path, and in my .bashrc that path is set correctly, but when python runs bash it doesn't seem to pick up anything set in my custom path.

In a different plugin it complains out loud about not being able to find git.

I couldn't figure out why this plugin wasn't working till I installed a different plugin that also couldn't find git

ST compatibility

Current version does not seem to work with Sublime Text 3.
Any chance you can upgrade it to work with the new version?

ST3 support

Sublime Text 3 is out in beta! Support for ST3 would be great... I don't know if this is a big issue, but converting to python 3 would do the trick I suppose.

Cheers

Permission denied

On Win7 I get the following error reported in the console:

Traceback (most recent call last):
  File ".\sublime_plugin.py", line 362, in run_
  File ".\git_gutter.py", line 9, in run
  File ".\view_collection.py", line 32, in diff
  File ".\git_gutter_handler.py", line 86, in diff
  File ".\git_gutter_handler.py", line 32, in update_buf_file
IOError: [Errno 13] Permission denied: '[path deleted by me]\\tmpqutkr8'

The file gets created, but the plugin seem to have a problem writing to it...

"Everyone" has full control over the temp-directory, so it should be a permission-issue.

I have observed the same behaviour on three different Win7 PCs.

with some of my .js file 'UnicodeDecodeError' occurs

Traceback (most recent call last):
File "./sublime_plugin.py", line 339, in run_
File "./git_gutter.py", line 32, in run
File "./view_collection.py", line 36, in diff
File "./git_gutter_handler.py", line 151, in diff
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 14146: invalid start byte

Traceback (most recent call last):
File "./sublime_plugin.py", line 339, in run_
File "./git_gutter.py", line 32, in run
File "./view_collection.py", line 36, in diff
File "./git_gutter_handler.py", line 149, in diff
LookupError: unknown encoding: Western(Windows1252)

Show icons on the file tab

Feature request.

Would be great to have a little feedback on what type of changes have you made to each file, examples:

tab-icons

or

tab-icons2

Retina versions of icons

Icons need 2x version for retina displays. If detection isn't possible, could be turned on via settings.

Feature request: navigate modifications

It would be cool to have keyboard shortcuts to go to next/previous hunk of modifications.

I have absolutely no idea how to do it and even if this is possible with the SublimeText API.

fatal: Path 'new.txt' does not exist in 'HEAD'

on ubuntu 12.10 with sublime 2.01, when adding a new file, e.g., new.txt, to a folder that is part of a git repo, i am seeing this error output to my shell after every edit:

fatal: Path 'new.txt' does not exist in 'HEAD'

Bug color

I followed the installation procedure but Git Gutter does not work. I'm on OSX and I've tried different themes.

The problem is in Packages/Git Gutter/git_gutter.py
The paths for the icons use GitGutter as part of the path, but the package is installed in Git Gutter by the Package Manager.

Capture d e cran 2012-12-12 a 08 41 05

Commit changes by clicking on gutter icons

Showing changes in a gutter is a great idea, and I think if it would be possible to stage changes by clicking on gutter icons would be even greater.

SideBarGit is too much an overkill for my taste, I want something more like git gui to interactively select what I want to commit and then do it.

What do you think?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.