Download src/js/models/collections.js from merve/git-101: direct link, hf CLI and curl.
- Browser
- Download file 3.03 kB
-
https://huggingface.co/spaces/merve/git-101/resolve/main/src/js/models/collections.js
- Command line
-
hf download hf://spaces/merve/git-101/src/js/models/collections.js
-
curl -L -o collections.js https://huggingface.co/spaces/merve/git-101/resolve/main/src/js/models/collections.js
3.03 kB
| var Q = require('q'); | |
| var Backbone = require('backbone'); | |
| var Commit = require('../git').Commit; | |
| var Branch = require('../git').Branch; | |
| var Tag = require('../git').Tag; | |
| var Command = require('../models/commandModel').Command; | |
| var TIME = require('../util/constants').TIME; | |
| var intl = require('../intl'); | |
| var CommitCollection = Backbone.Collection.extend({ | |
| model: Commit | |
| }); | |
| var CommandCollection = Backbone.Collection.extend({ | |
| model: Command | |
| }); | |
| var BranchCollection = Backbone.Collection.extend({ | |
| model: Branch | |
| }); | |
| var TagCollection = Backbone.Collection.extend({ | |
| model: Tag | |
| }); | |
| var CommandBuffer = Backbone.Model.extend({ | |
| defaults: { | |
| collection: null | |
| }, | |
| initialize: function(options) { | |
| options.collection.bind('add', this.addCommand, this); | |
| this.buffer = []; | |
| this.timeout = null; | |
| }, | |
| addCommand: function(command) { | |
| this.buffer.push(command); | |
| this.touchBuffer(); | |
| }, | |
| touchBuffer: function() { | |
| // touch buffer just essentially means we just check if our buffer is being | |
| // processed. if it's not, we immediately process the first item | |
| // and then set the timeout. | |
| if (this.timeout) { | |
| // timeout existence implies its being processed | |
| return; | |
| } | |
| this.setTimeout(); | |
| }, | |
| setTimeout: function() { | |
| this.timeout = setTimeout(function() { | |
| this.sipFromBuffer(); | |
| }.bind(this), TIME.betweenCommandsDelay); | |
| }, | |
| popAndProcess: function() { | |
| var popped = this.buffer.shift(0); | |
| // find a command with no error (aka unprocessed) | |
| while (popped.get('error') && this.buffer.length) { | |
| popped = this.buffer.shift(0); | |
| } | |
| if (!popped.get('error')) { | |
| this.processCommand(popped); | |
| } else { | |
| // no more commands to process | |
| this.clear(); | |
| } | |
| }, | |
| processCommand: function(command) { | |
| command.set('status', 'processing'); | |
| var deferred = Q.defer(); | |
| deferred.promise.then(function() { | |
| this.setTimeout(); | |
| }.bind(this)); | |
| var eventName = command.get('eventName'); | |
| if (!eventName) { | |
| throw new Error('I need an event to trigger when this guy is parsed and ready'); | |
| } | |
| var Main = require('../app'); | |
| var eventBaton = Main.getEventBaton(); | |
| var numListeners = eventBaton.getNumListeners(eventName); | |
| if (!numListeners) { | |
| var Errors = require('../util/errors'); | |
| command.set('error', new Errors.GitError({ | |
| msg: intl.str('error-command-currently-not-supported') | |
| })); | |
| deferred.resolve(); | |
| return; | |
| } | |
| Main.getEventBaton().trigger(eventName, command, deferred); | |
| }, | |
| clear: function() { | |
| clearTimeout(this.timeout); | |
| this.timeout = null; | |
| }, | |
| sipFromBuffer: function() { | |
| if (!this.buffer.length) { | |
| this.clear(); | |
| return; | |
| } | |
| this.popAndProcess(); | |
| } | |
| }); | |
| exports.CommitCollection = CommitCollection; | |
| exports.CommandCollection = CommandCollection; | |
| exports.BranchCollection = BranchCollection; | |
| exports.TagCollection = TagCollection; | |
| exports.CommandBuffer = CommandBuffer; | |