mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Merge branch '1.8.3'
This commit is contained in:
commit
de50b2902c
20 changed files with 67 additions and 61 deletions
|
@ -1,6 +1,11 @@
|
|||
|
||||
------ current release ---------------------------
|
||||
|
||||
1.8.3 (10/21/2009)
|
||||
+ Added support for Haiku R1/alpha1
|
||||
|
||||
------ old releases ------------------------------
|
||||
|
||||
1.8.2 (9/7/2009) f243f0ed443ecd7dde779de8a6525222591024db
|
||||
+ Added feature #282 that returns useful exit codes to the shell. Now a
|
||||
script can detect whether no tasks were returned by a report (thanks to
|
||||
|
@ -14,8 +19,6 @@
|
|||
+ Fixed bug #288 which failed to propagate rc file overrides on the command
|
||||
line to the default command (thanks to Zach Frazier).
|
||||
|
||||
------ old releases ------------------------------
|
||||
|
||||
1.8.1 (8/20/2009) 35792e7874d2bb664abb1a0a67960b7fe7e0fccf
|
||||
+ Fixed bug #231 that broke the build on OpenBSD 32-bit due to a time_t
|
||||
and int collision (thanks to Pietro Cerutti).
|
||||
|
|
1
NEWS
1
NEWS
|
@ -26,6 +26,7 @@ Task has been built and tested on the following configurations:
|
|||
- OpenBSD 4.5
|
||||
- FreeBSD
|
||||
- Cygwin 1.5
|
||||
- Haiku R1/alpha1
|
||||
|
||||
While Task has undergone testing, bugs are sure to remain. If you encounter a
|
||||
bug, please enter a new issue at:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.61)
|
||||
AC_INIT(task, 1.8.2, support@taskwarrior.org)
|
||||
AC_INIT(task, 1.8.3, support@taskwarrior.org)
|
||||
|
||||
CFLAGS="${CFLAGS=}"
|
||||
CXXFLAGS="${CXXFLAGS=}"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH task-tutorial 5 2009-09-07 "task 1.8.2" "User Manuals"
|
||||
.TH task-tutorial 5 2009-10-21 "task 1.8.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
task-tutorial \- A tutorial for the task(1) command line todo manager.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH task 1 2009-09-07 "task 1.8.2" "User Manuals"
|
||||
.TH task 1 2009-10-21 "task 1.8.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
task \- A command line todo manager.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH taskrc 5 2009-09-07 "task 1.8.2" "User Manuals"
|
||||
.TH taskrc 5 2009-10-21 "task 1.8.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
taskrc \- Configuration file for the task(1) command
|
||||
|
|
|
@ -1 +1 @@
|
|||
<pkg-contents spec="1.12"><f n="task" o="paul" g="staff" p="33261" pt="/Users/paul/task.git/package-config/osx/binary/task" m="false" t="file"/></pkg-contents>
|
||||
<pkg-contents spec="1.12"><f n="task" o="root" g="wheel" p="33261" pt="/Users/paul/task.git/package-config/osx/binary/task" m="false" t="file"><mod>group</mod><mod>owner</mod></f></pkg-contents>
|
|
@ -1 +1 @@
|
|||
<pkgref spec="1.12" uuid="C71026FD-E252-42CD-89C3-2F6F087AAF17"><config><identifier>com.beckingham.task180.task.pkg</identifier><version>1.8.0</version><description></description><post-install type="none"/><requireAuthorization/><installFrom mod="true">/Users/paul/task.git/package-config/osx/binary/task</installFrom><installTo mod="true" relocatable="true">/usr/local/bin</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>parent</mod><mod>locationType</mod><mod>relocatable</mod><mod>version</mod><mod>installTo.path</mod><mod>installTo</mod></config><contents><file-list>01task-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>
|
||||
<pkgref spec="1.12" uuid="C71026FD-E252-42CD-89C3-2F6F087AAF17"><config><identifier>com.beckingham.task182.task.pkg</identifier><version>1.8.2</version><description></description><post-install type="none"/><requireAuthorization/><installFrom mod="true">/Users/paul/task.git/package-config/osx/binary/task</installFrom><installTo mod="true" relocatable="true">/usr/local/bin</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>installTo</mod><mod>locationType</mod><mod>relocatable</mod><mod>identifier</mod><mod>parent</mod><mod>version</mod><mod>installTo.path</mod></config><contents><file-list>01task-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>
|
|
@ -1 +1 @@
|
|||
<pkmkdoc spec="1.12"><properties><title>Task 1.8.0</title><build>/Users/paul/Desktop/task-1.8.0.pkg</build><organization>com.beckingham</organization><userSees ui="easy"/><min-target os="3"/><domain anywhere="true" system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="task" id="choice0" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.beckingham.task180.task.pkg"/><choice-reqs><requirement id="tosv" operator="ge" value="'10.5.0'" selected="no" enabled="no" hidden="unchanged" startSelected="unchanged" startEnabled="unchanged" startHidden="unchanged"/></choice-reqs></choice></contents><resources bg-scale="proportional" bg-align="center"><locale lang="en"><resource mod="true" type="license">/Users/paul/task.git/package-config/osx/binary/COPYING.txt</resource><resource mod="true" type="readme">/Users/paul/task.git/package-config/osx/binary/README.txt</resource></locale></resources><flags/><item type="file">01task.xml</item><mod>properties.title</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
|
||||
<pkmkdoc spec="1.12"><properties><title>Task 1.8.2</title><build>/Users/paul/Desktop/task-1.8.2.pkg</build><organization>com.beckingham</organization><userSees ui="both"/><min-target os="3"/><domain anywhere="true" system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="task" id="choice0" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.beckingham.task182.task.pkg"/><choice-reqs><requirement id="tosv" operator="ge" value="'10.6.0'" selected="no" enabled="no" hidden="unchanged" startSelected="unchanged" startEnabled="unchanged" startHidden="unchanged"/></choice-reqs></choice></contents><resources bg-scale="proportional" bg-align="center"><locale lang="en"><resource mod="true" type="license">/Users/paul/task.git/package-config/osx/binary/COPYING.txt</resource><resource mod="true" type="readme">/Users/paul/task.git/package-config/osx/binary/README.txt</resource></locale></resources><flags/><item type="file">01task.xml</item><mod>properties.title</mod><mod>properties.customizeOption</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
|
|
@ -30,6 +30,7 @@
|
|||
#include <pwd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "Context.h"
|
||||
#include "Timer.h"
|
||||
#include "text.h"
|
||||
|
|
29
src/Date.cpp
29
src/Date.cpp
|
@ -29,6 +29,7 @@
|
|||
#include <time.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "Date.h"
|
||||
#include "text.h"
|
||||
#include "util.h"
|
||||
|
@ -82,14 +83,14 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||
// Single or double digit.
|
||||
case 'm':
|
||||
if (i >= mdy.length () ||
|
||||
! ::isdigit (mdy[i]))
|
||||
! isdigit (mdy[i]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||
}
|
||||
|
||||
if (i + 1 < mdy.length () &&
|
||||
(mdy[i + 0] == '0' || mdy[i + 0] == '1') &&
|
||||
::isdigit (mdy[i + 1]))
|
||||
isdigit (mdy[i + 1]))
|
||||
{
|
||||
month = ::atoi (mdy.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
|
@ -103,14 +104,14 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||
|
||||
case 'd':
|
||||
if (i >= mdy.length () ||
|
||||
! ::isdigit (mdy[i]))
|
||||
! isdigit (mdy[i]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||
}
|
||||
|
||||
if (i + 1 < mdy.length () &&
|
||||
(mdy[i + 0] == '0' || mdy[i + 0] == '1' || mdy[i + 0] == '2' || mdy[i + 0] == '3') &&
|
||||
::isdigit (mdy[i + 1]))
|
||||
isdigit (mdy[i + 1]))
|
||||
{
|
||||
day = ::atoi (mdy.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
|
@ -125,8 +126,8 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||
// Double digit.
|
||||
case 'y':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! ::isdigit (mdy[i + 0]) ||
|
||||
! ::isdigit (mdy[i + 1]))
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||
}
|
||||
|
@ -137,8 +138,8 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||
|
||||
case 'M':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! ::isdigit (mdy[i + 0]) ||
|
||||
! ::isdigit (mdy[i + 1]))
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||
}
|
||||
|
@ -149,8 +150,8 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||
|
||||
case 'D':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! ::isdigit (mdy[i + 0]) ||
|
||||
! ::isdigit (mdy[i + 1]))
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||
}
|
||||
|
@ -162,10 +163,10 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
|||
// Quadruple digit.
|
||||
case 'Y':
|
||||
if (i + 3 >= mdy.length () ||
|
||||
! ::isdigit (mdy[i + 0]) ||
|
||||
! ::isdigit (mdy[i + 1]) ||
|
||||
! ::isdigit (mdy[i + 2]) ||
|
||||
! ::isdigit (mdy[i + 3]))
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]) ||
|
||||
! isdigit (mdy[i + 2]) ||
|
||||
! isdigit (mdy[i + 3]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date.";
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ bool Nibbler::getInt (int& result)
|
|||
++i;
|
||||
}
|
||||
|
||||
while (i < mInput.length () && ::isdigit (mInput[i]))
|
||||
while (i < mInput.length () && isdigit (mInput[i]))
|
||||
++i;
|
||||
|
||||
if (i > mCursor)
|
||||
|
@ -260,7 +260,7 @@ bool Nibbler::getInt (int& result)
|
|||
bool Nibbler::getUnsignedInt (int& result)
|
||||
{
|
||||
std::string::size_type i = mCursor;
|
||||
while (i < mInput.length () && ::isdigit (mInput[i]))
|
||||
while (i < mInput.length () && isdigit (mInput[i]))
|
||||
++i;
|
||||
|
||||
if (i > mCursor)
|
||||
|
|
|
@ -153,7 +153,7 @@ bool Sequence::validId (const std::string& input) const
|
|||
return false;
|
||||
|
||||
for (size_t i = 0; i < input.length (); ++i)
|
||||
if (!::isdigit (input[i]))
|
||||
if (!isdigit (input[i]))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -876,7 +876,7 @@ void Table::sort (std::vector <int>& order)
|
|||
if (gap > 1)
|
||||
{
|
||||
gap = (int) ((float)gap / 1.3);
|
||||
if (gap == 10 or gap == 9)
|
||||
if (gap == 10 || gap == 9)
|
||||
gap = 11;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ Timer::~Timer ()
|
|||
<< mDescription
|
||||
<< " "
|
||||
<< std::setprecision (6)
|
||||
<< std::fixed
|
||||
// << std::fixed
|
||||
<< ((end.tv_sec - mStart.tv_sec) + ((end.tv_usec - mStart.tv_usec )
|
||||
/ 1000000.0))
|
||||
<< " sec";
|
||||
|
|
|
@ -106,16 +106,16 @@ static fileType determineFileType (const std::vector <std::string>& lines)
|
|||
{
|
||||
if ( lines[i][0] == 'x' &&
|
||||
lines[i][1] == ' ' &&
|
||||
::isdigit (lines[i][2]) &&
|
||||
::isdigit (lines[i][3]) &&
|
||||
::isdigit (lines[i][4]) &&
|
||||
::isdigit (lines[i][5]) &&
|
||||
isdigit (lines[i][2]) &&
|
||||
isdigit (lines[i][3]) &&
|
||||
isdigit (lines[i][4]) &&
|
||||
isdigit (lines[i][5]) &&
|
||||
lines[i][6] == '-' &&
|
||||
::isdigit (lines[i][7]) &&
|
||||
::isdigit (lines[i][8]) &&
|
||||
isdigit (lines[i][7]) &&
|
||||
isdigit (lines[i][8]) &&
|
||||
lines[i][9] == '-' &&
|
||||
::isdigit (lines[i][10]) &&
|
||||
::isdigit (lines[i][11]))
|
||||
isdigit (lines[i][10]) &&
|
||||
isdigit (lines[i][11]))
|
||||
return todo_sh_2_0;
|
||||
}
|
||||
|
||||
|
@ -126,13 +126,13 @@ static fileType determineFileType (const std::vector <std::string>& lines)
|
|||
// +project
|
||||
if (words[w].length () > 1 &&
|
||||
words[w][0] == '+' &&
|
||||
::isalnum (words[w][1]))
|
||||
isalnum (words[w][1]))
|
||||
return todo_sh_2_0;
|
||||
|
||||
// @context
|
||||
if (words[w].length () > 1 &&
|
||||
words[w][0] == '@' &&
|
||||
::isalnum (words[w][1]))
|
||||
isalnum (words[w][1]))
|
||||
return todo_sh_2_0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1400,9 +1400,9 @@ std::string renderMonths (
|
|||
row = 0;
|
||||
|
||||
// Loop through days in month and add to table.
|
||||
for (int d = 1; d <= daysInMonth.at (mpl); ++d)
|
||||
for (int d = 1; d <= daysInMonth[mpl]; ++d)
|
||||
{
|
||||
Date temp (months.at (mpl), d, years.at (mpl));
|
||||
Date temp (months[mpl], d, years[mpl]);
|
||||
int dow = temp.dayOfWeek ();
|
||||
int woy = temp.weekOfYear (weekStart);
|
||||
|
||||
|
@ -1420,9 +1420,9 @@ std::string renderMonths (
|
|||
table.addCell (row, thisCol, d);
|
||||
|
||||
if ((context.config.get ("color", true) || context.config.get (std::string ("_forcecolor"), false)) &&
|
||||
today.day () == d &&
|
||||
today.month () == months.at (mpl) &&
|
||||
today.year () == years.at (mpl))
|
||||
today.day () == d &&
|
||||
today.month () == months[mpl] &&
|
||||
today.year () == years[mpl])
|
||||
table.setCellFg (row, thisCol, Text::cyan);
|
||||
|
||||
foreach (task, all)
|
||||
|
@ -1434,8 +1434,8 @@ std::string renderMonths (
|
|||
|
||||
if ((context.config.get ("color", true) || context.config.get (std::string ("_forcecolor"), false)) &&
|
||||
due.day () == d &&
|
||||
due.month () == months.at (mpl) &&
|
||||
due.year () == years.at (mpl))
|
||||
due.month () == months[mpl] &&
|
||||
due.year () == years[mpl])
|
||||
{
|
||||
table.setCellFg (row, thisCol, Text::black);
|
||||
table.setCellBg (row, thisCol, due < today ? Text::on_red : Text::on_yellow);
|
||||
|
@ -1447,7 +1447,7 @@ std::string renderMonths (
|
|||
int eow = 6;
|
||||
if (weekStart == 1)
|
||||
eow = 0;
|
||||
if (dow == eow && d < daysInMonth.at (mpl))
|
||||
if (dow == eow && d < daysInMonth[mpl])
|
||||
row++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#! /bin/bash
|
||||
#! /bin/sh
|
||||
|
||||
date > all.log
|
||||
|
||||
|
@ -14,7 +14,7 @@ END=`tail -1 all.log`
|
|||
OS=`uname`
|
||||
|
||||
case $OS in
|
||||
Darwin)
|
||||
Darwin | FreeBSD)
|
||||
STARTEPOCH=`date -j -f "%a %b %d %T %Z %Y" "${START}" "+%s"`
|
||||
ENDEPOCH=`date -j -f "%a %b %d %T %Z %Y" "${END}" "+%s"`
|
||||
;;
|
||||
|
|
24
src/text.cpp
24
src/text.cpp
|
@ -209,7 +209,7 @@ std::string commify (const std::string& data)
|
|||
int i;
|
||||
for (int i = 0; i < (int) data.length (); ++i)
|
||||
{
|
||||
if (::isdigit (data[i]))
|
||||
if (isdigit (data[i]))
|
||||
end = i;
|
||||
|
||||
if (data[i] == '.')
|
||||
|
@ -227,11 +227,11 @@ std::string commify (const std::string& data)
|
|||
int consecutiveDigits = 0;
|
||||
for (; i >= 0; --i)
|
||||
{
|
||||
if (::isdigit (data[i]))
|
||||
if (isdigit (data[i]))
|
||||
{
|
||||
result += data[i];
|
||||
|
||||
if (++consecutiveDigits == 3 && i && ::isdigit (data[i - 1]))
|
||||
if (++consecutiveDigits == 3 && i && isdigit (data[i - 1]))
|
||||
{
|
||||
result += ',';
|
||||
consecutiveDigits = 0;
|
||||
|
@ -251,11 +251,11 @@ std::string commify (const std::string& data)
|
|||
int consecutiveDigits = 0;
|
||||
for (; i >= 0; --i)
|
||||
{
|
||||
if (::isdigit (data[i]))
|
||||
if (isdigit (data[i]))
|
||||
{
|
||||
result += data[i];
|
||||
|
||||
if (++consecutiveDigits == 3 && i && ::isdigit (data[i - 1]))
|
||||
if (++consecutiveDigits == 3 && i && isdigit (data[i - 1]))
|
||||
{
|
||||
result += ',';
|
||||
consecutiveDigits = 0;
|
||||
|
@ -279,8 +279,8 @@ std::string lowerCase (const std::string& input)
|
|||
{
|
||||
std::string output = input;
|
||||
for (int i = 0; i < (int) input.length (); ++i)
|
||||
if (::isupper (input[i]))
|
||||
output[i] = ::tolower (input[i]);
|
||||
if (isupper (input[i]))
|
||||
output[i] = tolower (input[i]);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
@ -290,8 +290,8 @@ std::string upperCase (const std::string& input)
|
|||
{
|
||||
std::string output = input;
|
||||
for (int i = 0; i < (int) input.length (); ++i)
|
||||
if (::islower (input[i]))
|
||||
output[i] = ::toupper (input[i]);
|
||||
if (islower (input[i]))
|
||||
output[i] = toupper (input[i]);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
@ -302,7 +302,7 @@ std::string ucFirst (const std::string& input)
|
|||
std::string output = input;
|
||||
|
||||
if (output.length () > 0)
|
||||
output[0] = ::toupper (output[0]);
|
||||
output[0] = toupper (output[0]);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ void guess (
|
|||
bool digitsOnly (const std::string& input)
|
||||
{
|
||||
for (size_t i = 0; i < input.length (); ++i)
|
||||
if (!::isdigit (input[i]))
|
||||
if (!isdigit (input[i]))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
@ -362,7 +362,7 @@ bool digitsOnly (const std::string& input)
|
|||
bool noSpaces (const std::string& input)
|
||||
{
|
||||
for (size_t i = 0; i < input.length (); ++i)
|
||||
if (::isspace (input[i]))
|
||||
if (isspace (input[i]))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -64,7 +64,7 @@ bool confirm (const std::string& question)
|
|||
<< " ";
|
||||
|
||||
std::getline (std::cin, answer);
|
||||
answer = lowerCase (trim (answer));
|
||||
answer = std::cin.eof() ? "no" : lowerCase (trim (answer));
|
||||
}
|
||||
while (answer != "y" && // TODO i18n
|
||||
answer != "ye" && // TODO i18n
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue