{"action":"created","comment":{"url":"https://api.github.com/repos/redox-os/coreutils/pulls/comments/57480079","id":57480079,"diff_hunk":"@@ -0,0 +1,525 @@\n+\n+\n+use std::env;\n+use std::fs;\n+use std::io::{self, BufRead, Read, Write};\n+use std::slice;\n+use std::str::FromStr;\n+\n+// libextra is not compiling.\n+use std::process;\n+pub fn fail<'a>(s: &'a str, stderr: &mut io::Stderr) -> ! {\n+    let mut stderr = stderr.lock();\n+\n+    let _ = stderr.write(b\"error: \");\n+    let _ = stderr.write(s.as_bytes());\n+    let _ = stderr.write(b\"\\n\");\n+    let _ = stderr.flush();\n+    process::exit(1);\n+}\n+\n+\n+static USAGE: &'static str = r#\"usage: cut -b list [-n] [file ...]\n+       cut -c list [file ...]\n+       cut -f list [-s] [-d delim] [file ...]\n+\"#;\n+\n+static MAN_PAGE : &'static str = r#\"NAME\n+     cut -- cut out selected portions of each line of a file\n+\n+SYNOPSIS\n+     cut -b list [-n] [file ...]\n+     cut -c list [file ...]\n+     cut -f list [-d delim] [-s] [file ...]\n+\n+DESCRIPTION\n+     The cut utility cuts out selected portions of each line (as specified by list) from each file and writes them to the standard output.  If\n+     no file arguments are specified, or a file argument is a single dash (`-'), cut reads from the standard input.  The items specified by\n+     list can be in terms of column position or in terms of fields delimited by a special character.  Column numbering starts from 1.\n+\n+     The list option argument is a comma or whitespace separated set of numbers and/or number ranges.  Number ranges consist of a number, a\n+     dash (`-'), and a second number and select the fields or columns from the first number to the second, inclusive.  Numbers or number\n+     ranges may be preceded by a dash, which selects all fields or columns from 1 to the last number.  Numbers or number ranges may be fol-\n+     lowed by a dash, which selects all fields or columns from the last number to the end of the line.  Numbers and number ranges may be\n+     repeated, overlapping, and in any order.  If a field or column is specified multiple times, it will appear only once in the output.  It\n+     is not an error to select fields or columns not present in the input line.\n+\n+     The options are as follows:\n+\n+     -b list\n+             The list specifies byte positions.\n+\n+     -c list\n+             The list specifies character positions.\n+\n+     -d delim\n+             Use delim as the field delimiter character instead of the tab character.\n+\n+     -f list\n+             The list specifies fields, separated in the input by the field delimiter character (see the -d option.)  Output fields are sepa-\n+             rated by a single occurrence of the field delimiter character.\n+\n+     -s      Suppress lines with no field delimiter characters.  Unless specified, lines with no delimiters are passed through unmodified.\n+\n+EXIT STATUS\n+     The cut utility exits 0 on success, and >0 if an error occurs.\n+\n+EXAMPLES\n+     Extract users' login names and shells from the system passwd(5) file as ``name:shell'' pairs:\n+\n+           cut -d : -f 1,7 /etc/passwd\n+\n+     Show the names and login times of the currently logged in users:\n+\n+           who | cut -c 1-16,26-38\n+\n+AUTHOR\n+     Written by Hernán E. Grecco.\n+\"#;\n+\n+/// The Selection object.\n+#[derive(Debug, PartialEq)]\n+struct Selection {\n+    /// Indicates which elements are selected.\n+    selected: Vec<bool>,\n+    /// True indicates that the selection continues after the range covered by `selected`.\n+    to_eol: bool,\n+}\n+\n+impl Selection {\n+    /// Constructs a Selection object from a list option argument.\n+    ///\n+    /// The list option argument is a comma or whitespace separated set of numbers and/or\n+    /// number ranges.  Number ranges consist of a number, a dash (`-'), and a second number\n+    /// and select the fields or columns from the first number to the second, inclusive.\n+    /// Numbers or number ranges may be preceded by a dash, which selects all fields or columns\n+    /// from 1 to the last number.  Numbers or number ranges may be followed by a dash,\n+    /// which selects all fields or columns from the last number to the end of the line.\n+    /// Numbers and number ranges may be repeated, overlapping, and in any order.\n+    /// If a field or column is specified multiple times, it will appear only once in the output.\n+    fn from_str(list: &str) -> Result<Self, ()> {\n+\n+        let empty = usize::from_str(\"\");\n+\n+        let mut selected: Vec<bool> = vec![];\n+        let mut to_eol = false;\n+\n+        for part in list.split(|c| c == ',' || c == ' ') {\n+            let subparts: Vec<Result<usize, std::num::ParseIntError>> =\n+                part.split(\"-\").map(|x| usize::from_str(x.trim())).collect();\n+\n+            // Matching a slice is currently unstable.\n+            match (subparts.get(0), subparts.get(1)) {\n+                // Single Number: M\n+                (Some(&Ok(index)), None) => toggle(&mut selected, index - 1),\n+                // Range with open begin: -N\n+                (Some(e), Some(&Ok(end))) if *e == empty => fill(&mut selected, 0, end),\n+                // Range with open end: M-\n+                (Some(&Ok(begin)), Some(e)) if *e == empty => {\n+                    toggle(&mut selected, begin - 1);\n+                    to_eol = true;\n+                }\n+                // Range: M-N\n+                (Some(&Ok(begin)), Some(&Ok(end))) => fill(&mut selected, begin - 1, end),\n+\n+                _ => return Err(()),\n+            }\n+        }\n+        Ok(Selection {\n+            selected: selected,\n+            to_eol: to_eol,\n+        })\n+    }\n+\n+    /// Creates an iterator that yields selected values from a second iterator.\n+    fn select_from<I>(&self, values: I) -> SelectFromIter<I>\n+        where I: Iterator\n+    {\n+        SelectFromIter::new(values, self.selected.iter(), self.to_eol)\n+    }\n+}\n+\n+/// Iterator that simultaneoulsy iters over a value and a boolean iterator,\n+/// yielding a value from the first when the second is True.\n+/// If `to_eol` is true, then all values from the first will be yielded\n+/// when the second reaches the end.\n+struct SelectFromIter<'a, I>\n+    where I: Iterator\n+{\n+    values: I,\n+    selected: slice::Iter<'a, bool>,\n+    to_eol: bool,\n+    consumed: bool,\n+}\n+\n+impl<'a, I> SelectFromIter<'a, I> where I: Iterator\n+{\n+    fn new(values: I, selected: slice::Iter<'a, bool>, to_eol: bool) -> Self {\n+        SelectFromIter {\n+            values: values,\n+            selected: selected,\n+            to_eol: to_eol,\n+            consumed: false,\n+        }\n+    }\n+}\n+\n+impl<'a, I> Iterator for SelectFromIter<'a, I> where I: Iterator\n+{\n+    type Item = I::Item;\n+\n+    fn next(&mut self) -> Option<I::Item> {\n+        if self.consumed {\n+            // The selected iterator was consumed ...\n+            // but we continue yielding values from the values iterator.\n+            return self.values.next();\n+        } else {\n+            // The selected iterator is not yet consumed.\n+            // Consume both iterators and ..\n+            // - If the value iterator fininishes, finish also SelectFromIter (return None).\n+            // - If the value is selected, return it.\n+            // - If the selected iterator finishes:\n+            //      finish also SelectFromIter if not to_eol;\n+            //      return the value otherwise and move to the other branch,\n+            //        yield the rest from value iterator.\n+            // - If the value is not selected (_), continue with the loop.\n+            loop {\n+                let (v, s) = (self.values.next(), self.selected.next());\n+                if v.is_none() {\n+                    return None;\n+                }\n+                match s {\n+                    Some(&true) => return v,\n+                    None => {\n+                        // The selected iterator finished,\n+                        if self.to_eol {\n+                            self.consumed = true;\n+                            return v;\n+                        } else {\n+                            return None;\n+                        }\n+                    }\n+                    _ => {}\n+                }\n+            }\n+        }\n+        return None;\n+    }\n+}\n+\n+/// Set a boolean array element to true, extending the array if necessary.\n+fn toggle(v: &mut Vec<bool>, index: usize) {\n+    if index + 1 > v.len() {\n+        v.resize(index + 1, false);\n+    }\n+    v[index] = true;\n+}\n+\n+/// Fill a range (including first and last element) in a boolean array to true,\n+/// extending the array if necessary.\n+fn fill(v: &mut Vec<bool>, begin: usize, end: usize) {\n+    // This could be more eficient by breaking it up into\n+    // differente cases and filling with true and false\n+    // but I do not think is worth it.\n+    if end > v.len() {\n+        v.resize(end, false);\n+    }\n+    for index in begin..end {\n+        v[index] = true;\n+    }\n+}\n+\n+/// Write selected bytes from a reader.\n+fn cut_bytes<R: Read, W: Write>(input: R, output: W, selection: &Selection) {\n+    let reader = io::BufReader::new(input);\n+    let mut writer = io::BufWriter::new(output);\n+\n+    for line in reader.lines() {\n+        let line = line.unwrap();\n+        let bytes = line.bytes();\n+        for el in selection.select_from(bytes) {\n+            let _ = writer.write(&[el]);\n+        }\n+        let _ = writer.write(b\"\\n\");\n+    }\n+}\n+\n+/// Write selected characters from a reader.\n+fn cut_characters<R: Read, W: Write>(input: R, output: W, selection: &Selection) {\n+    let reader = io::BufReader::new(input);\n+    let mut writer = io::BufWriter::new(output);\n+\n+    for line in reader.lines() {\n+        let line = line.unwrap();\n+        let chars = line.chars();\n+        for el in selection.select_from(chars) {\n+            let _ = write!(&mut writer, \"{}\", el);\n+        }\n+        let _ = writer.write(b\"\\n\");\n+    }\n+}\n+\n+/// Write selected fields from a reader.\n+///\n+/// The delimiter is also printed when there are more than 1 fields.\n+///\n+/// # arguments\n+///\n+/// * `delimiter` - Indicates how the fields are delimited\n+/// * `skip_if_missing` - If true, lines not containing the field delimiter will be skipped.\n+fn cut_fields<R: Read, W: Write>(input: R, output: W, selection: &Selection,\n+                                 delimiter: &str, skip_if_missing: bool) {\n+    let reader = io::BufReader::new(input);\n+    let mut writer = io::BufWriter::new(output);\n+\n+    for line in reader.lines() {\n+        let line = line.unwrap();\n+        if !line.contains(delimiter) {\n+            if !skip_if_missing {\n+                let _ = writeln!(&mut writer, \"{}\", line);\n+            }\n+            continue;\n+        }\n+        let fields = line.split(delimiter);\n+\n+        // The first element is separated as a way to include the delimiter\n+        // in the output if there are more than two elements.\n+        let mut it = selection.select_from(fields);\n+        if let Some(el) = it.next() {\n+            let _ = write!(&mut writer, \"{}\", el);\n+        } else {\n+            continue;\n+        }\n+        for el in it {\n+            let _ = write!(&mut writer, \"{}{}\", delimiter, el);\n+        }\n+        let _ = writer.write(b\"\\n\");\n+    }\n+}\n+\n+\n+// Operating mode for cut.\n+#[derive(Debug, PartialEq)]\n+enum Mode {\n+    Bytes,\n+    Characters,\n+    Fields,\n+}\n+\n+\n+fn main() {\n+\n+    // Arguments.\n+    let mut mode: Option<Mode> = None;\n+    let mut delimiter: Option<String> = None;\n+    let mut skip_if_missing: Option<bool> = None;\n+    let mut list: String = \"\".into();\n+\n+\n+    let stdout = io::stdout();\n+    let mut stdout = stdout.lock();\n+    let mut stderr = io::stderr();\n+    let mut args = env::args().skip(1);\n+    let mut paths: Vec<String> = Vec::new();\n+\n+    // parse options\n+    while let Some(arg) = args.next() {\n+        if arg.starts_with('-') {\n+            match arg.as_str() {\n+                \"-h\" | \"--help\" => {\n+                    let _ = stdout.write(MAN_PAGE.as_bytes());\n+                    return;\n+                }\n+                \"-b\" => {\n+                    if mode.is_some() {\n+                        fail(USAGE, &mut stderr);\n+                    }\n+                    mode = Some(Mode::Bytes);\n+                    list = args.next().unwrap();\n+                }\n+                \"-c\" => {\n+                    if mode.is_some() {\n+                        fail(USAGE, &mut stderr);\n+                    }\n+                    mode = Some(Mode::Characters);\n+                    list = args.next().unwrap();\n+                }\n+                \"-f\" => {\n+                    if mode.is_some() {\n+                        fail(USAGE, &mut stderr);\n+                    }\n+                    mode = Some(Mode::Fields);\n+                    list = args.next().unwrap();\n+                }\n+                \"-s\" => {\n+                    skip_if_missing = Some(true);\n+                }\n+                \"-d\" => {\n+                    let dlm = args.next().unwrap();\n+                    if dlm.len() != 1 {\n+                        fail(\"bad delimiter\", &mut stderr)\n+                    }\n+                    delimiter = Some(dlm);\n+                }\n+                _ => fail(\"invalid option\", &mut stderr),\n+            }\n+        } else {\n+            paths.push(arg);\n+        }\n+    }\n+\n+    let selection = match Selection::from_str(&list) {\n+        Ok(s) => s,\n+        _ => fail(\"illegal list value\", &mut stderr),\n+    };\n+\n+    let mode = match mode {\n+        Some(m) => m,\n+        _ => fail(USAGE, &mut stderr),","path":"src/bin/cut.rs","position":378,"original_position":378,"commit_id":"1ea75a860f4c435c827311b5dc1b4be852676907","original_commit_id":"1ea75a860f4c435c827311b5dc1b4be852676907","user":{"login":"Ticki","id":13349091,"avatar_url":"https://avatars.githubusercontent.com/u/13349091?v=3","gravatar_id":"","url":"https://api.github.com/users/Ticki","html_url":"https://github.com/Ticki","followers_url":"https://api.github.com/users/Ticki/followers","following_url":"https://api.github.com/users/Ticki/following{/other_user}","gists_url":"https://api.github.com/users/Ticki/gists{/gist_id}","starred_url":"https://api.github.com/users/Ticki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ticki/subscriptions","organizations_url":"https://api.github.com/users/Ticki/orgs","repos_url":"https://api.github.com/users/Ticki/repos","events_url":"https://api.github.com/users/Ticki/events{/privacy}","received_events_url":"https://api.github.com/users/Ticki/received_events","type":"User","site_admin":false},"body":"Or even better yet: the method provided by `OptionalExt` from libextra, `fail`.","created_at":"2016-03-25T19:20:56Z","updated_at":"2016-03-25T19:20:56Z","html_url":"https://github.com/redox-os/coreutils/pull/45#discussion_r57480079","pull_request_url":"https://api.github.com/repos/redox-os/coreutils/pulls/45","_links":{"self":{"href":"https://api.github.com/repos/redox-os/coreutils/pulls/comments/57480079"},"html":{"href":"https://github.com/redox-os/coreutils/pull/45#discussion_r57480079"},"pull_request":{"href":"https://api.github.com/repos/redox-os/coreutils/pulls/45"}}},"pull_request":{"url":"https://api.github.com/repos/redox-os/coreutils/pulls/45","id":64188775,"html_url":"https://github.com/redox-os/coreutils/pull/45","diff_url":"https://github.com/redox-os/coreutils/pull/45.diff","patch_url":"https://github.com/redox-os/coreutils/pull/45.patch","issue_url":"https://api.github.com/repos/redox-os/coreutils/issues/45","number":45,"state":"open","locked":false,"title":"Add cut command","user":{"login":"hgrecco","id":278566,"avatar_url":"https://avatars.githubusercontent.com/u/278566?v=3","gravatar_id":"","url":"https://api.github.com/users/hgrecco","html_url":"https://github.com/hgrecco","followers_url":"https://api.github.com/users/hgrecco/followers","following_url":"https://api.github.com/users/hgrecco/following{/other_user}","gists_url":"https://api.github.com/users/hgrecco/gists{/gist_id}","starred_url":"https://api.github.com/users/hgrecco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hgrecco/subscriptions","organizations_url":"https://api.github.com/users/hgrecco/orgs","repos_url":"https://api.github.com/users/hgrecco/repos","events_url":"https://api.github.com/users/hgrecco/events{/privacy}","received_events_url":"https://api.github.com/users/hgrecco/received_events","type":"User","site_admin":false},"body":"All options are implemented except for `-n`","created_at":"2016-03-25T17:58:54Z","updated_at":"2016-03-25T19:20:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"91f0c31f1735bf259d2c2dc424ee3573bc743f5e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/redox-os/coreutils/pulls/45/commits","review_comments_url":"https://api.github.com/repos/redox-os/coreutils/pulls/45/comments","review_comment_url":"https://api.github.com/repos/redox-os/coreutils/pulls/comments{/number}","comments_url":"https://api.github.com/repos/redox-os/coreutils/issues/45/comments","statuses_url":"https://api.github.com/repos/redox-os/coreutils/statuses/1ea75a860f4c435c827311b5dc1b4be852676907","head":{"label":"hgrecco:master","ref":"master","sha":"1ea75a860f4c435c827311b5dc1b4be852676907","user":{"login":"hgrecco","id":278566,"avatar_url":"https://avatars.githubusercontent.com/u/278566?v=3","gravatar_id":"","url":"https://api.github.com/users/hgrecco","html_url":"https://github.com/hgrecco","followers_url":"https://api.github.com/users/hgrecco/followers","following_url":"https://api.github.com/users/hgrecco/following{/other_user}","gists_url":"https://api.github.com/users/hgrecco/gists{/gist_id}","starred_url":"https://api.github.com/users/hgrecco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hgrecco/subscriptions","organizations_url":"https://api.github.com/users/hgrecco/orgs","repos_url":"https://api.github.com/users/hgrecco/repos","events_url":"https://api.github.com/users/hgrecco/events{/privacy}","received_events_url":"https://api.github.com/users/hgrecco/received_events","type":"User","site_admin":false},"repo":{"id":54736917,"name":"coreutils","full_name":"hgrecco/coreutils","owner":{"login":"hgrecco","id":278566,"avatar_url":"https://avatars.githubusercontent.com/u/278566?v=3","gravatar_id":"","url":"https://api.github.com/users/hgrecco","html_url":"https://github.com/hgrecco","followers_url":"https://api.github.com/users/hgrecco/followers","following_url":"https://api.github.com/users/hgrecco/following{/other_user}","gists_url":"https://api.github.com/users/hgrecco/gists{/gist_id}","starred_url":"https://api.github.com/users/hgrecco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hgrecco/subscriptions","organizations_url":"https://api.github.com/users/hgrecco/orgs","repos_url":"https://api.github.com/users/hgrecco/repos","events_url":"https://api.github.com/users/hgrecco/events{/privacy}","received_events_url":"https://api.github.com/users/hgrecco/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hgrecco/coreutils","description":"The Redox coreutils.","fork":true,"url":"https://api.github.com/repos/hgrecco/coreutils","forks_url":"https://api.github.com/repos/hgrecco/coreutils/forks","keys_url":"https://api.github.com/repos/hgrecco/coreutils/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hgrecco/coreutils/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hgrecco/coreutils/teams","hooks_url":"https://api.github.com/repos/hgrecco/coreutils/hooks","issue_events_url":"https://api.github.com/repos/hgrecco/coreutils/issues/events{/number}","events_url":"https://api.github.com/repos/hgrecco/coreutils/events","assignees_url":"https://api.github.com/repos/hgrecco/coreutils/assignees{/user}","branches_url":"https://api.github.com/repos/hgrecco/coreutils/branches{/branch}","tags_url":"https://api.github.com/repos/hgrecco/coreutils/tags","blobs_url":"https://api.github.com/repos/hgrecco/coreutils/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hgrecco/coreutils/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hgrecco/coreutils/git/refs{/sha}","trees_url":"https://api.github.com/repos/hgrecco/coreutils/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hgrecco/coreutils/statuses/{sha}","languages_url":"https://api.github.com/repos/hgrecco/coreutils/languages","stargazers_url":"https://api.github.com/repos/hgrecco/coreutils/stargazers","contributors_url":"https://api.github.com/repos/hgrecco/coreutils/contributors","subscribers_url":"https://api.github.com/repos/hgrecco/coreutils/subscribers","subscription_url":"https://api.github.com/repos/hgrecco/coreutils/subscription","commits_url":"https://api.github.com/repos/hgrecco/coreutils/commits{/sha}","git_commits_url":"https://api.github.com/repos/hgrecco/coreutils/git/commits{/sha}","comments_url":"https://api.github.com/repos/hgrecco/coreutils/comments{/number}","issue_comment_url":"https://api.github.com/repos/hgrecco/coreutils/issues/comments{/number}","contents_url":"https://api.github.com/repos/hgrecco/coreutils/contents/{+path}","compare_url":"https://api.github.com/repos/hgrecco/coreutils/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hgrecco/coreutils/merges","archive_url":"https://api.github.com/repos/hgrecco/coreutils/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hgrecco/coreutils/downloads","issues_url":"https://api.github.com/repos/hgrecco/coreutils/issues{/number}","pulls_url":"https://api.github.com/repos/hgrecco/coreutils/pulls{/number}","milestones_url":"https://api.github.com/repos/hgrecco/coreutils/milestones{/number}","notifications_url":"https://api.github.com/repos/hgrecco/coreutils/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hgrecco/coreutils/labels{/name}","releases_url":"https://api.github.com/repos/hgrecco/coreutils/releases{/id}","deployments_url":"https://api.github.com/repos/hgrecco/coreutils/deployments","created_at":"2016-03-25T17:57:04Z","updated_at":"2016-03-25T17:57:05Z","pushed_at":"2016-03-25T17:57:58Z","git_url":"git://github.com/hgrecco/coreutils.git","ssh_url":"git@github.com:hgrecco/coreutils.git","clone_url":"https://github.com/hgrecco/coreutils.git","svn_url":"https://github.com/hgrecco/coreutils","homepage":"","size":109,"stargazers_count":0,"watchers_count":0,"language":"Rust","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"redox-os:master","ref":"master","sha":"b78188aa2ca020190dd50349161e85dda7ff1272","user":{"login":"redox-os","id":14909902,"avatar_url":"https://avatars.githubusercontent.com/u/14909902?v=3","gravatar_id":"","url":"https://api.github.com/users/redox-os","html_url":"https://github.com/redox-os","followers_url":"https://api.github.com/users/redox-os/followers","following_url":"https://api.github.com/users/redox-os/following{/other_user}","gists_url":"https://api.github.com/users/redox-os/gists{/gist_id}","starred_url":"https://api.github.com/users/redox-os/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/redox-os/subscriptions","organizations_url":"https://api.github.com/users/redox-os/orgs","repos_url":"https://api.github.com/users/redox-os/repos","events_url":"https://api.github.com/users/redox-os/events{/privacy}","received_events_url":"https://api.github.com/users/redox-os/received_events","type":"Organization","site_admin":false},"repo":{"id":48803546,"name":"coreutils","full_name":"redox-os/coreutils","owner":{"login":"redox-os","id":14909902,"avatar_url":"https://avatars.githubusercontent.com/u/14909902?v=3","gravatar_id":"","url":"https://api.github.com/users/redox-os","html_url":"https://github.com/redox-os","followers_url":"https://api.github.com/users/redox-os/followers","following_url":"https://api.github.com/users/redox-os/following{/other_user}","gists_url":"https://api.github.com/users/redox-os/gists{/gist_id}","starred_url":"https://api.github.com/users/redox-os/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/redox-os/subscriptions","organizations_url":"https://api.github.com/users/redox-os/orgs","repos_url":"https://api.github.com/users/redox-os/repos","events_url":"https://api.github.com/users/redox-os/events{/privacy}","received_events_url":"https://api.github.com/users/redox-os/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/redox-os/coreutils","description":"The Redox coreutils.","fork":false,"url":"https://api.github.com/repos/redox-os/coreutils","forks_url":"https://api.github.com/repos/redox-os/coreutils/forks","keys_url":"https://api.github.com/repos/redox-os/coreutils/keys{/key_id}","collaborators_url":"https://api.github.com/repos/redox-os/coreutils/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/redox-os/coreutils/teams","hooks_url":"https://api.github.com/repos/redox-os/coreutils/hooks","issue_events_url":"https://api.github.com/repos/redox-os/coreutils/issues/events{/number}","events_url":"https://api.github.com/repos/redox-os/coreutils/events","assignees_url":"https://api.github.com/repos/redox-os/coreutils/assignees{/user}","branches_url":"https://api.github.com/repos/redox-os/coreutils/branches{/branch}","tags_url":"https://api.github.com/repos/redox-os/coreutils/tags","blobs_url":"https://api.github.com/repos/redox-os/coreutils/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/redox-os/coreutils/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/redox-os/coreutils/git/refs{/sha}","trees_url":"https://api.github.com/repos/redox-os/coreutils/git/trees{/sha}","statuses_url":"https://api.github.com/repos/redox-os/coreutils/statuses/{sha}","languages_url":"https://api.github.com/repos/redox-os/coreutils/languages","stargazers_url":"https://api.github.com/repos/redox-os/coreutils/stargazers","contributors_url":"https://api.github.com/repos/redox-os/coreutils/contributors","subscribers_url":"https://api.github.com/repos/redox-os/coreutils/subscribers","subscription_url":"https://api.github.com/repos/redox-os/coreutils/subscription","commits_url":"https://api.github.com/repos/redox-os/coreutils/commits{/sha}","git_commits_url":"https://api.github.com/repos/redox-os/coreutils/git/commits{/sha}","comments_url":"https://api.github.com/repos/redox-os/coreutils/comments{/number}","issue_comment_url":"https://api.github.com/repos/redox-os/coreutils/issues/comments{/number}","contents_url":"https://api.github.com/repos/redox-os/coreutils/contents/{+path}","compare_url":"https://api.github.com/repos/redox-os/coreutils/compare/{base}...{head}","merges_url":"https://api.github.com/repos/redox-os/coreutils/merges","archive_url":"https://api.github.com/repos/redox-os/coreutils/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/redox-os/coreutils/downloads","issues_url":"https://api.github.com/repos/redox-os/coreutils/issues{/number}","pulls_url":"https://api.github.com/repos/redox-os/coreutils/pulls{/number}","milestones_url":"https://api.github.com/repos/redox-os/coreutils/milestones{/number}","notifications_url":"https://api.github.com/repos/redox-os/coreutils/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/redox-os/coreutils/labels{/name}","releases_url":"https://api.github.com/repos/redox-os/coreutils/releases{/id}","deployments_url":"https://api.github.com/repos/redox-os/coreutils/deployments","created_at":"2015-12-30T14:13:05Z","updated_at":"2016-03-25T08:57:54Z","pushed_at":"2016-03-25T17:58:54Z","git_url":"git://github.com/redox-os/coreutils.git","ssh_url":"git@github.com:redox-os/coreutils.git","clone_url":"https://github.com/redox-os/coreutils.git","svn_url":"https://github.com/redox-os/coreutils","homepage":"","size":112,"stargazers_count":20,"watchers_count":20,"language":"Rust","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":13,"mirror_url":null,"open_issues_count":5,"forks":13,"open_issues":5,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/redox-os/coreutils/pulls/45"},"html":{"href":"https://github.com/redox-os/coreutils/pull/45"},"issue":{"href":"https://api.github.com/repos/redox-os/coreutils/issues/45"},"comments":{"href":"https://api.github.com/repos/redox-os/coreutils/issues/45/comments"},"review_comments":{"href":"https://api.github.com/repos/redox-os/coreutils/pulls/45/comments"},"review_comment":{"href":"https://api.github.com/repos/redox-os/coreutils/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/redox-os/coreutils/pulls/45/commits"},"statuses":{"href":"https://api.github.com/repos/redox-os/coreutils/statuses/1ea75a860f4c435c827311b5dc1b4be852676907"}}}}